multer 无法识别带有 PUT 的文件

multer won't recognize files with PUT

所以我刚刚安装了节点并启动了一个带有 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 文件就好了,e。 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.


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

用于发送 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');
  });
});