将文件从s3存储桶写入本地后返回状态

时间:2018-11-27 02:55:27

标签: javascript node.js amazon-s3

试图从s3存储桶中获取文件并将其存储在本地,一旦将其写入本地,则从本地读取文件并将数据转换为json格式并发送。

我需要检查文件是否已下载并写入本地,一旦文件存在,只能读取并将其转换为json,否则发送错误消息。

一旦文件打开,我正在写文件并结束。因此,结束后我无法发送返回值。因此,我如何解决这一问题并使用try catch发送适当的错误消息。

const fetchFileDownloadAndWriteIt = () => {
 let Bucket = "DataBucket";
 let filename = "sample_data.csv";
 let s3 = new AWS.S3();
 const params = {
   Bucket: Bucket,
   Key: filename
 };

 return s3.getObject(params)
          .promise()
          .then(data => {
            const file = fs.createWriteStream('./localdata/' + filename);
            file.on("open", () => {
             file.write(data.Body);
             file.end();  
            })
            .on("error", err => {
               console.log("Error Occured while writing", err.message)
             })
          })
            .catch(err => {
             console.log("unable to fetch file from s3 Bucket", err.message)
          })


}


exports.fetchData = async (req,res) => {
  let fileDownloadAndWrite = await fetchFileAndDownloadWriteIt();
  // need to check file is downloaded and written properly
  const path = "./localdata/sample_data.csv";
  const json = await csv().fromFile(path);
  res.send({data: json})

}

1 个答案:

答案 0 :(得分:1)

您可以通过调用new Promise API来返回SDK's而不是返回的return new Promise((res, rej) => { s3.getObject(params) .promise() .then(data => { const file = fs.createWriteStream('./localdata/' + filename); file .on("open", () => { file.write(data.Body); file.end(); //success res(); }) .on("error", err => { rej(err); }) }) .catch(err => { rej(err); }) });

undefined

这将解析为exports.fetchData = async (req, res, next) => { try { await fetchFileDownloadAndWriteIt(); // need to check file is downloaded and written properly - here the file is actually downloaded and written properly. const path = "./localdata/sample_data.csv"; const json = await csv().fromFile(path); res.send({ data: json }) } catch (err) { return next(err); } } 并被拒绝,并出现适当的错误,例如在写入文件时等。

如何在处理程序中调用它?

这样的事情就可以了。

{{1}}
相关问题