【问题标题】:multer won't recognize files with PUTmulter 无法识别带有 PUT 的文件
【发布时间】:2015-11-28 20:17:20
【问题描述】:

所以我刚刚安装了 node 并使用 express 启动了一个小型 HTTP 服务器。我正在尝试使用 multer 和 HTTP PUT 上传文件,但似乎 multer 无法处理 PUT 文件。

POST 做同样的事情就可以了。

这是我的main.js

var express = require('express');
var multer = require('multer');
var storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, './uploads')
    },
    filename: function (req, file, cb) {
        cb(null, file.originalname)
    }
});
var upload = multer({ storage: storage });
var app = express();

app.get('/', function (req, res) {
  res.send('Up and running');
});

app.put('/up/:file', upload.any(), function (req, res, next) {
  console.log('files: ' + req.files);
  console.log(req.params.file);
  res.send('got that');
})

app.post('/up', upload.any(), function (req, res, next) {
  res.send('got that');
})

var server = app.listen(8888, function(){
    var host = server.address().address;
    var port = server.address().port;
    console.log('Example app listening at http://%s:%s', host, port);
});

使用curl 我可以使用POST 文件就好了,例如。 G。 curl --form "file=@someFile.jpg" http://localhost:8888/up

我尝试使用curl http://localhost:8888/up/someFile.jpg --upload-file someFile.jpgcurl -i -T someFile.jpg http://localhost:8888/up/someFile.jpg 放置文件,但它不起作用。 req.files 始终是 undefined


问题/TL;DR: multer 是否无法通过PUT 接受文件?如何通过快递接收PUT 的文件?实际上,我不需要 express ... 一个普通的节点解决方案就足够了。

【问题讨论】:

    标签: node.js express file-upload put multer


    【解决方案1】:

    您发送 PUT 请求的两种curl 形式不是发送multipart/form-data 正文,而是将原始文件内容作为正文发送。 multer 不支持它,因为它需要 multipart/form-data 编码的形式。

    要支持这些原始文件上传,您需要自己处理它们(例如,将请求通过管道传输到磁盘或其他任何地方)。例如:

    app.put('/up/:file', function (req, res, next) {
      // TODO: optionally validate `req.headers['content-type']`
      // TODO: sanitize `req.params.file` before
      // using it to create the filename
      var filename = req.params.file;
      var diskStream = fs.createWriteStream(path.join(__dirname, 'uploads', filename));
      req.pipe(diskStream).on('finish', function() {
        res.send('got that');
      });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-25
      • 2023-03-08
      • 2015-06-29
      • 1970-01-01
      • 2018-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多