将 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 文件上传到 aws s3 存储桶

将 csv 和 json 数据从 S3 复制到 Redshift

从静态网页上传 csv 文件到 S3 存储桶

如何将 s3 数据从一个 EMR 集群读取到另一个 EMR 集群?

将 CSV 流从 Ruby 上传到 S3

将 RedShift 文件以 CSV 格式移至 S3