当前位置: 首页 > 知识库问答 >
问题:

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

岳泉
2023-03-14

我正在尝试通过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输出:

对象

文件

Capture.PNG

并且console.log(req.file)的输出为“未定义”


共有1个答案

施彬彬
2023-03-14

目标文件这两个属性都应该是函数

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')作为您的字段名。

 类似资料:
  • 我正在尝试将文件上载到FTP服务器 正如我在这里发现的,如何将文件上传到FTP服务器?,我有以下代码:

  • 我想上传一个文件到不同的服务器使用卷曲。我读过许多类似的问题,但我没有得到任何解决我的问题。下面是我现在得到的代码: 当我运行此脚本时,它将保持运行200秒,并以以下方式响应: Sep 17 20:56:58 xxxxx vsftpd[2613]:[user]确定登录:客户端“yyyyy” Sep 17 20:56:58 xxxxx vsftpd[2618]:[用户]FTP响应:客户端“YYYYY

  • 我正在尝试重命名一个与multer上传的图像文件的请求参数。 下面是我的代码: 它的工作很好,但我想知道它是否存在一些更干净和更容易与multer重命名功能。 它已经尝试过这样的事情: 但它不起作用,因为req尚未填充(未定义)。 我使用httpie使用以下命令测试我的代码: 有没有可能使用multer的重命名功能来做我用FS做的事情?还是有更好的办法? 谢谢你的反馈。 托玛斯 编辑 使用Disk

  • 问题内容: 好吧,这看起来很简单,确实如此。将文件下载到服务器所需要做的就是: 只有一个问题。如果文件很大,例如100mb,该怎么办?然后,您将耗尽内存,并且无法下载文件。 我想要的是一种在下载文件时将文件写入磁盘的方法。这样,我可以下载更大的文件,而不会遇到内存问题。 问题答案: 从PHP 5.1.0开始,支持通过传递流句柄作为参数来逐段编写: 从手册中: 如果 数据 [是第二个参数]是流资源,

  • 我正在用phonegap和jQuery Mobile开发应用程序。我想从播放列表中选择音频文件,然后上传到服务器上。我有谷歌它,但没有链接显示选择音频文件然后上传到服务器上,我不想录制任何音频。我只想上传音频(那是在我的音乐文件夹或播放列表)在服务器上。请帮帮我.

  • 我希望能够上传一个图像文件(。png,。jpg等..)到我的网络服务器(用ASPX运行IIS服务器),只使用HTML和AJAX。 代码如下: 我听说enctype="multipart/form-data"可以工作,但在我的情况下显然不行... 我应该怎么做才能让我的AJAX代码上传图像文件?