Multer 没有将文件上传到服务器

Posted

技术标签:

【中文标题】Multer 没有将文件上传到服务器【英文标题】:Multer is not uploading a file to the server 【发布时间】: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) 的输出是“未定义”

【问题讨论】:

【参考方案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。参考:***.com/questions/21194934/… 我已创建文件夹并将“文件”更改为“图像”,但不幸的是问题仍然存在

以上是关于Multer 没有将文件上传到服务器的主要内容,如果未能解决你的问题,请参考以下文章

在 Express Node js 中使用 multer sftp 将文件上传到远程服务器?

将所有multer上传的文件移动到Nodejs中的新目的地

使用 Multer 上传文件并在解析和上传到数据库之前将其短暂存储在内存中

使用 multer 上传的文件存储在云端后如何删除?

在使用 Multer 将文件上传到文件夹之前删除和创建文件夹

Multer-s3 在手机上上传空文件