node.js - nodeJS AWS S3上传数据编码错误

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

我有一个小应用程序可以将文件上传到AWS S3,它上传正常,但是当我从S3存储桶下载文件时,它会被编码,显示类型:缓冲区等...

如果我从控制台上传相同的文件,它显示得很好。

这里是要上传的代码

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();

是 body 的问题吗?如何保存与客户端相同的文件? 谢谢

最佳答案

问题是您尝试在 Buffer 上执行 JSON.stringify,因为 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 1:1 作为 upload 操作的 Body 传递即可)

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

关于node.js - nodeJS AWS S3上传数据编码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51395046/

相关文章:

javascript - 我使用 bcryptjs compare 的结果返回 false。将明文与来自数据库 (mongodb) 的散列密码进行比较时。(node-js)

java - Amazon EC2 意外停止工作

amazon-web-services - istio - 使用 vs 服务和 gw 代替负载均衡器不起作用

node.js - 在 node.js 中使用 pdfkit 发送 HTTP 响应

node.js - 在 node.js 中对 Mongoose 用户使用 _.omit

python - FileNotFoundError 在使用 Python 的 AWS Lambda 上出现前导斜线问题

amazon-web-services - 如何获取S3存储桶上每个文件夹的总对象数和总存储量

amazon-web-services - s3 存储桶 URL 有效,但当我转到 Cloudfront 托管的实际 URL 时,我的电子邮件表单无法正常工作,权限问题?

javascript - Node.JS 上的跟踪系统

amazon-web-services - AWS Neptune 是否需要互联网访问?