【问题标题】:Unable to upload file image using Ajax and Multer无法使用 Ajax 和 Multer 上传文件图像
【发布时间】:2019-12-05 12:41:44
【问题描述】:

从 ajax 请求上传文件时,Multer 给出了下面给出的错误。

TypeError [ERR_INVALID_ARG_TYPE]:第一个参数必须是 输入字符串或缓冲区。接收到的类型对象 在 rite_ (_http_outgoing.js:595:11)

// code block for multer  start
    var Storage = multer.diskStorage({
        destination: function(req, file, callback) {
            callback(null, "./uploads/posts");
        },
        filename: function(req, file, callback) {
            callback(null, file.fieldname + "_" + Date.now() + "_" + file.originalname);
        }
    });


    var upload = multer({
        storage: Storage
    }).single('imgData');




//route Ajax Rquest URL Start
        router.post('/blog/saveUploadImage',urlencoderParser,(req,res)=>{
          upload(req, res, function(err) {
               if (err) {
                 return res.end({UplaodStatus:true,type:'success',text:' ???? Image Uploaded Now Saving Your Data It will take just a sec.'});
               }
               return res.end({UplaodStatus:false,type:'error',text:' ☹ Sorry There was some Problem Uploading Image '});
           });

        });
        //route Ajax Rquest URL End 

                //JS code  
               // code for geting file
               let fileUpload = document.getElementById('uploadFile').files;

               //appending the file to formdata 
               var formData = new FormData();
                formData.append('imgData', fileUpload);


    //AJAX Request
    $.ajax({
          enctype:'multipart/form-data',
          data:formData,
          url:'/admin/blog/saveUploadImage',
          type:'POST',
          cache:false,
          contentType:false,
          processData:false,
          timeout:10000,
      });

【问题讨论】:

    标签: node.js ajax express ejs multer


    【解决方案1】:

    问题是我导入了这个包(看下面),因为这个 multer 不工作。

    const fileUpload = require('express-fileupload');
    

    所以我删除了它,现在它可以正常工作了。

    【讨论】:

      【解决方案2】:

      问题是我导入了这个包(看下面),因为这个 multer 不工作。

      const fileUpload = require('express-fileupload');

      所以我删除了它现在它工作正常。

      感谢您的帮助。

      【讨论】:

        【解决方案3】:

        您将一个文件数组传递给formData.append(...),而应该只从该数组中选择第一个元素:

        let fileUpload = document.getElementById('uploadFile').files[0];
        

        【讨论】:

        • ** let fileUpload = document.getElementById('uploadFile').files[0]; ** //仍然得到同样的错误 [ERR_INVALID_ARG_TYPE]: The first argument must be one of type string or Buffer.接收到的类型对象
        • 但是如果将 res.end({JSON}) 函数更改为 **res.send({JSON}) ** 没有错误并且响应是文件上传但是文件未出现在上传目录中。
        猜你喜欢
        • 2018-09-16
        • 2021-11-09
        • 2017-02-10
        • 1970-01-01
        • 1970-01-01
        • 2018-10-23
        • 2023-01-07
        • 2017-03-03
        • 2014-10-13
        相关资源
        最近更新 更多