我上传了html输入的文件,并将其传递到请求正文中的服务器,现在如何在NodeJS中读取它?

问题描述 投票:-2回答:1

我在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之类的技巧,但没有成功。

node.js express fs
1个回答
0
投票
或req.files.file.data返回文件的缓冲区表示。
© www.soinside.com 2019 - 2024. All rights reserved.