从Web下载文件并保存到S3

时间:2017-09-23 21:29:06

标签: meteor amazon-s3

在本地计算机上运行的此Meteor服务器代码(应用程序的一部分)从Web下载文件并将其保存到AWS S3。 这个Meteor应用程序也可以在EC2 docker容器上运行。但是当进行以下修改时,它无法运行,因为docker ps没有显示正在运行的容器。

修改在本地计算机上运行正常,该计算机从Web下载文件并将其上载到AWS S3 任何想法如何解决它,以便在EC2 docker容器上运行时,它会下载文件并将其保存到AWS S3?感谢

// server

    let AWS = require('aws-sdk');
    fs = require('fs');
    let request = Npm.require('request');

    Meteor.startup(() => {
    AWS.config.update({
      accessKeyId: 'abc',
      secretAccessKey: 'xyz'
    });
    let url = "http://techslides.com/demos/sample-videos/small.mp4";

    let fileArray = url.split("/");
    let file = fileArray[fileArray.length - 1];

    // (((it would be good if copying locally is avoided)))
    // let localFilePath =  "/home/ec2-user/"+file;    // <=== fails on EC2 
    let localFilePath = "/local/path/ + file; // <=== works locally

    request(url).pipe(fs.createWriteStream(localFilePath)).on("finish", function() {
      fs.readFile(localFilePath, function(err, data) {
        if (err) {
          console.log("file does not exists");
          throw err;
        }
        let base64data = new Buffer(data, 'binary');
        let s3 = new AWS.S3();
        s3.putObject({
          Bucket: 'myBucket',
          Key: file,
          Body: base64data,
        }, function(resp) {
          console.log(arguments);
          console.log('Successfully uploaded package.');
          fs.unlink(localFilePath);
        });
      })
    });
  });

1 个答案:

答案 0 :(得分:1)

原因是本地docker文件系统是只读的,因此您无法在本地保存文件。查看类似问题的答案:Allow user to download file from public folder Meteor.js

有几个Meteor软件包可以帮助您解决此问题,例如https://atmospherejs.com/ostrio/files您可以在Atmosphere上搜索以找到合适的软件包