将 CSV 文件从 JSON 数据上传到 S3 存储桶
Posted
技术标签:
【中文标题】将 CSV 文件从 JSON 数据上传到 S3 存储桶【英文标题】:Uploading a CSV file to S3 Bucket from JSON data 【发布时间】:2018-06-08 22:35:13 【问题描述】:我正在使用节点 js,我正在尝试将 CSV 文件上传到 Amazon S3 存储桶,它应该给我 csv 的 url 作为响应。 我有以下格式的 JSON 数据:-
["a","b","c","d"]
我怎样才能达到同样的效果?
【问题讨论】:
我是上传文件到 aws 的初学者 所以我们在同一页面上,您有一个文件要上传到 AWS S3 服务,对吧? 是的,但首先我必须调用一个 API,所有这些工作都将在 API 级别完成,我只需要文件 url 【参考方案1】:您可以为此使用 AWS 和代码,就像您可以将所需数据写入 test.csv 中的文件一样,因为我们有权在 tmp 文件夹上写入。我们使用包'fs'进行文件读写。
let csvContent '';
neededData.forEach((rowArray) =>
const row = Object.values(rowArray);
csvContent += `$row\r\n`;
);
const tempFileName = `/tmp/test.csv`;
fs.writeFileSync(tempFileName, csvContent);
AWS.config.update( accessKeyId: '....',secretAccessKey'....' );
return await uploadFile(tempFileName);
我们在这里创建一个函数uploadFile
方法:
async function uploadFile(filePath)
return new Promise((resolve, reject) =>
fs.readFile(filePath, (err, datauser) =>
if (err) reject(err);
const base64data = new Buffer(datauser, 'binary');
const fileName = 'filename';
const bucketName = 'bucket name';
const rigion = 'rigion';
link = `https://s3-$rigion.amazonaws.com/$bucketName/$fileName`;
const s3 = new AWS.S3();
s3.putObject(
Bucket: bucketName,
Key: fileName,
Body: base64data,
ACL: 'public-read',
, () =>
resolve(link);
);
);
);
此函数将在 AWS 上推送文件并返回 URL。
【讨论】:
【参考方案2】:由于您使用的是 javascript,您可能会查看 AWS Amplify 的存储组件:https://github.com/aws/aws-amplify/blob/master/media/storage_guide.md
对于您的用例,它将类似于:
Storage.put('userfile.csv', 'User XXX CSV uploading')
.then (result => console.log(result))
.catch(err => console.log(err));
【讨论】:
您希望它如何工作?你在哪里告诉 Storage.put() 使用什么内容/文件?以上是关于将 CSV 文件从 JSON 数据上传到 S3 存储桶的主要内容,如果未能解决你的问题,请参考以下文章
将 csv 和 json 数据从 S3 复制到 Redshift