我在index.html中有一个表单:
<form method="post" action="/upload">
<input type="text" id="bucket-name" name="bucket-name" />
<input type="file" id="file" name="file" />
<button id="upload">Upload</button>
</form>
哪个路由到app.js:
app.post('/upload', (req, res) => {
var uploadParams = {Bucket: req.body.bucket, Key: '', Body: ''};
var file = req.body.file;
var fs = require('fs');
var fileStream = fs.createReadStream(file);
fileStream.on('error', function(err) {
console.log('File Error', err);
});
uploadParams.Body = fileStream;
var path = require('path');
uploadParams.Key = path.basename(file);
s3.upload (uploadParams, function (err, data) {
if (err) {
console.log("Error", err);
} if (data) {
console.log("Upload Success", data.Location);
}
});
});
但出现错误:
TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string or an instance of Buffer or URL. Received undefined
at Object.open (fs.js:423:10)
at _openReadFs (internal/fs/streams.js:158:15)
at new ReadStream (internal/fs/streams.js:135:5)
at Object.createReadStream (fs.js:1835:10)
at /home/ec2-user/s3/app.js:27:22
at Layer.handle [as handle_request] (/home/ec2-user/s3/node_modules/express/lib/router/layer.js:95:5)
at next (/home/ec2-user/s3/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/home/ec2-user/s3/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/home/ec2-user/s3/node_modules/express/lib/router/layer.js:95:5)
at /home/ec2-user/s3/node_modules/express/lib/router/index.js:281:22
[当我简单地记录req.body.file变量时,它是上载文件名的字符串(即“ test.csv”)。 我如何从html输入中传递文件以表示fs.createReadStream可读的文件?
[我已经尝试了一些在线教程,这些教程向我指出了enctype="multipart/form-data"
和https://www.npmjs.com/package/express-fileupload之类的技巧,但没有成功。