Загрузите файл с URL и загрузите в корзину AWS S3 - PullRequest
0 голосов
/ 07 августа 2020

Я создаю систему для загрузки файлов, отправленных боту WhatsApp, используя сервер node express.

Когда мой сервер получает данные из WhatsApp, в запросе есть ссылка на медиафайл .body, и я хотел бы получить файл по этой ссылке и загрузить его в корзину AWS S3. Я также хотел бы получить тип файла, то есть обычно jpg или pdf.

Я играл с этим кодом Иоганна Филиппа Стратхаузена

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)

1 Ответ

0 голосов
/ 07 августа 2020

В итоге я использовал ax ios, чтобы получить файл и передать его функции 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)
    }
}
...