Ax ios получить файл по URL и загрузить в s3 - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь получить файлы с сайта, используя ax ios .get, а затем загружаю их прямо на S3. Однако файлы повреждены или неправильно закодированы и не могут быть открыты после загрузки. Типы файлов варьируются от .jpg, .png до .pdf. Вот мой код:

axios.get(URL, {
  responseEncoding: 'binary',
  responseType: 'document',
}).then((response) => {
  return new Promise((resolve, reject) => {
    const s3Bucket = nconf.get('AWS_S3_BUCKET');

    s3.upload({
      'ACL': 'public-read',
      'Body': response.data,
      'Bucket': s3Bucket,
      'Key': `static/${filePath}/${fileManaged.get('filename')}`,
    }, function(err) {
      if (err) {
        return reject(err);
      }
    });
  });
});

Я попытался изменить responseType на arraybuffer и создать буфер с использованием Buffer.from(response.data, 'binary').toString('base64'), но безрезультатно. Что мне не хватает?

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Мне удалось заставить его работать, используя arraybuffer и .putObject функцию вместо .upload

axios.get(encodeURI(url), {
  responseType: 'arraybuffer',
}).then((response) => {
s3.putObject({
  'ACL': 'public-read',
  'Body': response.data,
  'Bucket': s3Bucket,
  'Key': `static/${filePath}/${fileManaged.get('filename')}`,
} function(err) {
0 голосов
/ 05 мая 2020

Ax ios кодирует тело ответа в utf8.
Вам следует использовать другую библиотеку, например request.

...