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.jpg
和 curl -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');
});
});
所以我刚刚安装了节点并启动了一个带有 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.jpg
和 curl -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');
});
});