我在nodejs中有问题。 我希望能解决这个问题。
我在文件上传时使用了multer和可怕的功能。
如果我发送append [文件,字符串,字符串],则发生错误 但更改顺序后追加[字符串,文件,字符串]或[字符串,字符串,文件],然后成功上传文件。
我认为,第一个参数是附加文件,因此会发生错误。
这是可怕的消息来源。
const form = new formidable.IncomingForm();
var path = top_path;
form.encoding = 'utf-8';
form.uploadDir = './file';
form.multiples = true;
form.keepExtensions = true; //확장자 표시
var fields = [];
var files = [];
var fields_array = [];
var files_array = [];
form.on('field', function(field, value){
form.uploadDir = path;
fields.push([field, value]);
fields_array.push(value);
}).on('file', function(field, file){
files.push([field, file.name]);
files_array.push(file_name);
})
form.on('end', function(){
console.log('총 파일 업로드 갯수 ==', this.openedFiles.length);
console.log('---------<fields>---------');
for(var i = 0; i<fields_array.length; i++){
console.log('fields['+i+']: '+fields_array[i]);
}
console.log('---------<files>---------');
for(var i = 0; i<files_array.length; i++){
console.log('files['+i+']: '+files_array[i]);
}
console.log('---------<end>---------');
var trans_object ={
'field' : fields_array,
'file' : files_array
}
res.send(trans_object);
fields = [];
files = [];
fields_array = [];
files_array = [];
}).on('error', function(error){
console.error(error);
})
form.parse(req, function(err, field, file){
console.log('[parse()] error: '+err +', field : '+field+', file : '+file);
console.log('upload success..');
})
这是multer源。
var storage = multer.diskStorage({
destination: function (req, file, next) {
// next(null, './uploads')
var path = req.body.path;
next(null, path);
},
filename: function (req, file, next) {
var originalFilename = file.originalname.split(".");
var extension = originalFilename[1].toLowerCase();
var filename = originalFilename[0];
file_name = Date.now() +"_"+ filename + "." + extension; //save filename
next(null, file_name);
}
}),
upload = multer({
storage: storage,
limits:{fileSize: 100*1024*1024}
}),
fUpload = upload.fields([{
name: 'input_file',
maxCount: 10
}])
var file_upload = async () => {
return new Promise((resolve, reject) => {
fUpload(req, res, function (err) {
if (err) {
console.log(err.message);
resolve(err.message);
} else {
var file = file_name;
if(file_count > 0)file = file_arr;
var data = {
path:path,
filename : file
}
console.log(data);
resolve(data);
return true;
}
});
});
}
let uploader = async () =>{
let rtn_upload = await file_upload();
res.send(rtn_upload);
}
uploader();
如果我在文件中使用了第一个参数,则文件上传失败。
例如
var form = new FormData();
form.append("input_file", $("input[name=input_file]")[0].files[0]);
form.append("path", $("#path").val());
form.append("filename", $("#filename").val());
然后在nodejs中未定义主体中的此路径和文件名。
但是在文件之外使用了第一个参数,然后成功上传了文件。
例如
var form = new FormData();
form.append("path", $("#path").val());
form.append("filename", $("#filename").val());
form.append("input_file", $("input[name=input_file]")[0].files[0]);
原来是吗?还是我已经用代码解决了这个问题?