nodeJS AWS S3上传数据编码错误

时间:2018-07-18 06:34:01

标签: node.js amazon-web-services amazon-s3

我有一个小应用程序,可以将文件上传到AWS S3,它可以上传,但是当我从S3存储桶下载文件时,文件被编码,并显示type:buffer等...

如果我从控制台上传相同的文件,则显示正常。

这里是要上传的代码

const fs = require('fs');
const AWS = require('aws-sdk');
const s3 = new AWS.S3({
    accessKeyId: process.env.AWS_ACCESS_KEY,
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
});

const fileName = 'su.csv';
const uploadFile = () => {
    fs.readFile(fileName, (err, data) => {
        if (err) throw err;
        const params = {
            Bucket: 'mybukk22-test', // pass your bucket name
            Key: 'su.csv', // file will be saved as testBucket/contacts.csv
            Body: JSON.stringify(data, null, 2)
        };
        s3.upload(params, function (s3Err, data) {
            if (s3Err) throw s3Err
            console.log(`File uploaded successfully at ${data.Location}`)
        });
    });
};

uploadFile();

身体有问题吗?如何在客户端上保存相同的文件? 谢谢

1 个答案:

答案 0 :(得分:2)

问题是您正在尝试在JSON.stringify上进行Buffer,因为fs.readFile返回了Buffer。要使其正常工作,您可以将params更改为以下内容:

const params = {
    Bucket: 'mybukk22-test', // pass your bucket name
    Key: 'su.csv', // file will be saved as testBucket/contacts.csv
    Body: data
};

(只需将data操作中的Body 1:1作为upload的操作}

否则,如果您想坚持自己的解决方案,只需将data强制转换为这样的字符串:JSON.stringify(data.toString(), null, 2)