[英]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.