Почему не удалось загрузить файл, когда первым параметром был файл? - PullRequest
0 голосов
/ 21 февраля 2019

У меня проблема в nodejs.Я надеюсь решить эту проблему.

Я использовал multer и грозный при загрузке файла.

, если я отправляю append [file, string, string], поэтому происходит ошибка, но изменяется порядок добавления append [string, file,строка] или [строка, строка, файл], затем успешная загрузка файла.

Я думаю, первый параметр - это файл в добавлении, поэтому возникает ошибка.

Это огромный источник.

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..');
})

И это источник из нескольких источников.

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: 1001024}
}),
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();

если я использовал первый параметр в файле, а затем не удалось загрузить файл.

example

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.

Но использовался первый параметр, кроме файла, затем файл успешной загрузки.

example *1024*

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]);

Это изначально?или я решил эту проблему в коде?

...