使用node.js将文件上载到S3

时间:2016-03-09 05:45:41

标签: node.js file amazon-s3 upload

我正在创建一个门户网站,用户可以在其中选择PC上的单个文件并将其上传到S3。

以下是我的server.js代码:

app.post('/ submit_doc',function(req,res){

var FileName = req.body.fileName,
Filedescription = req.body.filediscrip,
InputFileName = req.body.inputfile;
AWS.config.region = 'eu-west-1';
var fileStream = fs.createReadStream(FileName);
fileStream.on('error', function (err) {
    if (err){
        console.log("Error reading file: ", err);
        res.send(500);
    }
    else{
        fileStream.on('open', function () {
            var s3 = new AWS.S3();
            s3.putObject({
                Bucket: 'exampleassetcare.com',
                Key: 'reports/'+FileName,
                Body: fileStream
             }, function (err) {
             if (err) { 
                 console.log("Error uploading data: ", err);
                 res.send(500);
             }
         });
     });

我收到错误:没有这样的文件或目录。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

如果我正确理解您,您发布的此代码正在服务器上运行。但输入是由客户端提供的,是吗?如果是这样,您的服务器将尝试在本地查找文件,基于客户端提供给您的文件路径...因此该文件不会存在...

如果我是恶意用户而且我告诉您的服务器上传文件路径<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> ,您的服务器将会公开散列密码(假设它是Linux系统,并假设有适当的权限,等等......但你明白了。)

答案 1 :(得分:0)

将其更改为

var FileName = req.body.fileName,
Filedescription = req.body.filediscrip,
InputFileName = req.body.inputfile;
AWS.config.region = 'eu-west-1';
console.log(FileName)
var fileStream = fs.createReadStream(FileName);

并检查您的文件是否存在,看起来文件路径有问题。