[英]Download file from Url and upload to AWS S3 bucket
我正在创建一个系统来上传使用节点快速服务器发送到 WhatsApp 机器人的文件。
当我的服务器从 whatsapp 获取数据时,req.body 中有一个指向媒体文件的链接,我希望能够从该链接获取文件并将其上传到 AWS S3 存储桶。 我还想获取文件类型,即通常为 jpg 或 pdf。
我玩过 Johann Philipp Strathausen 的这段代码
var fs = require('fs');
var zlib = require('zlib');
var body = fs.createReadStream('bigfile').pipe(zlib.createGzip());
var s3obj = new AWS.S3({params: {Bucket: 'myBucket', Key: 'myKey'}});
s3obj.upload({Body: body})
.on('httpUploadProgress', function(evt) { console.log(evt); })
.send(function(err, data) { console.log(err, data) });
使用它执行最后一行时出现以下错误
错误:ENOENT:没有这样的文件或目录,打开“url/from/whatsapp/api”在以下位置发出“错误”事件:
在lazyFs.open (internal/fs/streams.js:115:12)
在 FSReqWrap.args [as oncomplete] (fs.js:140:20)
最后我使用 axios 获取文件并将其传递给 s3upload function
const whatsAppUpload = async (file) => {
try{
let {data, headers} = await axios.get(file, {responseType: 'stream'});
let id = crypto.randomBytes(8).toString('hex');
let link = headers['content-type'];
let format = link.split("/").pop();
let key = Date.now() + id + "." + format;
const objectParams = {
Bucket: 'bucket-name-here',
ACL: 'public-read',
ServerSideEncryption: 'AES256',
ContentLength: headers['content-length'],
Body: data,
ContentType: headers['content-type'],
Key: key
};
data = await s3.upload(objectParams).promise();
console.log(`File uploaded successfully. ${data.Location}`);
} catch(err){
console.log("ERROR --->" + err)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.