我正在创建一个系统,以使用节点快递服务器上传发送到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” 在以下位置发出的“错误”事件:
at lazyFs.open(internal / fs / streams.js:115:12)
在FSReqWrap.args中的[作为完整完成时(fs.js:140:20)
答案 0 :(得分:0)
最后,我使用axios来获取文件并将其传递给s3upload函数
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)
}
}