【问题标题】:Multer is not uploading a file to the serverMulter 没有将文件上传到服务器
【发布时间】:2020-12-16 09:11:09
【问题描述】:

我正在尝试通过 Multer 将文件上传到服务器。这段代码所做的只是创建文件夹而不是文件。我也尝试使用 github 上的教程,但也没有运气 我在前端

上的代码
<p class="font-weight-bolder mb-3">Upload Screenshot
    <form enctype="multipart/form-data"></form><input id="uploadFile" type="file" name="image" />
</p>

代码AJAX

$('#uploadFile').on('change', function(){
  var file = $(this).get(0).files[0];
  console.log(typeof file);
  console.log(file)
  console.log(file.name)
  var formData = new FormData();
  formData.append('Upload', file, file.name);
  $.ajax({
    url: $(this).attr('action') || window.location.pathname + '/repr_screenshot',
    type: "POST",
    data: file,
    cache: false,
    processData: false,
    success: function(data){
      console.log("success")
    },
    error: function(data){
      console.log("file not uploaded")
    }
  });
})

还有 MAIN.JS

var multer  = require('multer')

var storage = multer.diskStorage({
  destination: 'views/repr/mixin/screenshots',
  filename: '/file.png'})

var upload = multer({storage: storage,
  onFileUploadStart: function (file) {
    console.log(file.originalname + ' is starting ...')
  }
});

router.post('/repr_screenshot', upload.single('image'), function (req, res, next) {
  console.log(req.file);
  return false;
})

我从前端得到的 console.log 输出:

Object

File {name: "Capture.PNG", lastModified: 1597907180050, lastModifiedDate: Thu Aug 20 2020 10:06:20 GMT+0300 (Eastern European Summer Time), webkitRelativePath: "", size: 89172, …}

Capture.PNG

console.log(req.file) 的输出是“未定义”

【问题讨论】:

    标签: javascript node.js ajax


    【解决方案1】:

    destinationfilename 两个属性都应该是函数。文档参考here

    const storage = multer.diskStorage({
      destination: function (req, file, callback) {
        callback(null, "views/repr/mixin/screenshots");
      },
      filename: function (req, file, callback) {
        callback(null, file.originalname);
      },
    });
    
    const upload = multer({ storage: storage }).single("image");
    
    
    router.post("/repr_screenshot", (req, res) => {
      upload(req, res, (err) => {
        if (err) {
          console.log(err);
          return res.end("error file uploading");
        }
        res.status(200);
      });
    });
    

    如果有任何问题,请告诉我。

    更新:目标文件夹在上传之前应该已经存在。

    我已将 .single('file') 更改为 .single('image') 作为您的字段名。

    【讨论】:

    • 它没有给出任何问题,但是仍然不会上传文件,现在甚至没有创建文件夹
    • 请检查更新后的代码。而且您必须根据文档预先创建目标文件夹。如果你想动态创建文件夹,你可以使用包 mkdirp 或 fs。参考:stackoverflow.com/questions/21194934/…
    • 我已创建文件夹并将“文件”更改为“图像”,但不幸的是问题仍然存在
    猜你喜欢
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 2013-04-26
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多