在本地计算机上运行的此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);
});
})
});
});
答案 0 :(得分:1)
原因是本地docker文件系统是只读的,因此您无法在本地保存文件。查看类似问题的答案:Allow user to download file from public folder Meteor.js
有几个Meteor软件包可以帮助您解决此问题,例如https://atmospherejs.com/ostrio/files您可以在Atmosphere上搜索以找到合适的软件包