Загрузить файл с S3 на локальный компьютер - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь загрузить аудиофайл (mp3) из AWS S3 на локальный компьютер.Он отлично работает, когда я выполняю на локальном хосте, но после развертывания того же кода на AWS.Он загружает файлы на сервер, а не на локальный компьютер пользователя.

Пробовал эти две версии.Оба делают одинаково

Версия 1:

    const key = track.audio_transcode_filename.substring(20);

    var s3Client = knox.createClient(envConfig.S3_BUCKET_TRACKS);
    const os = require('os');
    const downloadPath = os.homedir().toString();
    const config =require('../../config/environment');
    const fs = require('fs');
    var filePath=downloadPath + "\\Downloads\\" + track.formatted_title + ".mp3";
    if (fs.existsSync(filePath)) {
        var date = new Date();
        var timestamp = date.getTime();
        filePath=downloadPath + "\\Downloads\\" + track.formatted_title + "_" + timestamp + ".mp3";
     }
    const file = fs.createWriteStream(filePath);

    s3Client.getFile(key, function(err, res) {
      res.on('data', function(data) { file.write(data); });
      res.on('end', function(chunk) { file.end(); });
    });

Версия 2:

  var audioStream = '';

    s3Client.getFile(key, function(err, res) {
      res.on('data', function(chunk) { audioStream += chunk });
      res.on('end', function() { fs.writeFile(filePath + track.formatted_title + ".mp3", audioStream, 'binary')})
    }); 

Спасибо, Кант

Ответы [ 3 ]

0 голосов
/ 09 февраля 2019

Вам нужно будет отправить его пользователю.Итак, я думаю, что у вас есть expressJS, и пользователь может получить элемент, используя вашу конечную точку API.

После того, как все, что вы сделали в своем вопросе, вам нужно будет отправить его пользователю.

res.sendFile('/path/to/downloaded/s3/object')
0 голосов
/ 13 февраля 2019

Спасибо, @Rashomon и @Martin делают Сантос.Мне нужно было добавить скрипт на стороне клиента, чтобы прочитать поток ответов и загрузить файл следующим образом

downloadTrack(track).then((result) =>{
      //var convertedBuffer = new Uint8Array(result.data);
      const url = window.URL.createObjectURL(new Blob([result.data],{type: 'audio/mpeg'}));
      const link = document.createElement('a');
      link.href = url;
      link.setAttribute('download', track.formatted_title + '.mp3');
      document.body.appendChild(link);
      link.click();
  }, (error) =>{

  console.error(error);
})
0 голосов
/ 09 февраля 2019

Вместо получения файла и повторной отправки клиенту, как насчет получения URL-адреса файла и перенаправления клиента?

Что-то вроде:

s3Client.getResourceUrl(key, function(err, resourceUrl) {
  res.redirect(resourceUrl); 
)};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...