router.post("/upload", function (req, res) {
var form = new multiparty.Form();
form.parse(req, function (err, fields, files) {
if(err){
console.error("上传文件失败:",JSON.stringify(err));
/*根据打印的日志,在此步骤就出错了,过几天就报如下错误:
{"errno":-122,"code":"Unknown system error -122","syscall":"open","path":"/tmp/Fds_8mw1a7Fr4ZxF_oRsxRmg.jpg"}*/
}
if (files == null) {
console.error("没有得到文件:",JSON.stringify(err));
res.send({ code: 502, msg: "请选择要上传文件" });
}
else {
comFun.saveFileThen(files, function (fileInfos) {
if (fileInfos) {
var returnInfos = fileInfos.map((fileInfo, index) => {
return {
url: fileInfo.url,
fileId: fileInfo.id,
fileName: fileInfo.name
};
});
res.send({
code: 200,
url: returnInfos[0].url,
fileId: returnInfos[0].fileId,
fileName: returnInfos[0].fileName,
files: returnInfos,
msg: 'ok',
error: 0
});
} else {
var error = new AV.Error();
error.code = 502;
error.message = "上传失败!";
error.error = 1;
res.send(error);
}
})
}
});
});
//上传到leanCloud
function saveFileThen(myFiles, callbackFun) {
if (myFiles == null) {
callbackFun();
return;
}
var attachmentFiles = myFiles.file || myFiles.attachment || myFiles.imgFile;
var ps = [];
attachmentFiles.forEach((attachmentFile, index) => {
ps[index] = new Promise(function (resolve, reject) {
if (attachmentFile && attachmentFile.size !== 0 && attachmentFile.originalFilename !== '') {
fs.readFile(attachmentFile.path, function (err, data) {
if (err) {
console.error("读取文件失败:"+err.message)
reject({msg: err.message, url: () => "", name:attachmentFile.originalFilename});
return;
}
var theFile = new AV.File(attachmentFile.originalFilename, data);
theFile.save().then(function (theFile) {
resolve({
url: theFile.url(),
name: attachmentFile.originalFilename,
id: theFile.id
});
}, function (err) {
console.error("上传到LeanCloud失败:"+ JSON.stringify(err))
resolve({msg: err.message, url: () => "", name:attachmentFile.originalFilename });
});
});
} else {
reject({msg: "no_file_fount", url: () => ""});
}
});
});
Promise.all(ps).then(function (results) {
callbackFun(results);
},function(err){
console.error("Promise.all,上传到LeanCloud失败:"+ JSON.stringify(err))
resolve()
});
}