【问题标题】:Download a file from S3 to Local machine将文件从 S3 下载到本地计算机
【发布时间】:2019-07-03 04:14:19
【问题描述】:

我正在尝试将音频 (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')})
    }); 

谢谢, 坎特

【问题讨论】:

    标签: node.js amazon-s3 download stream


    【解决方案1】:

    与其获取文件并再次发送给客户端,不如获取文件的url并重定向客户端?

    类似:

    s3Client.getResourceUrl(key, function(err, resourceUrl) {
      res.redirect(resourceUrl); 
    )};
    

    【讨论】:

      【解决方案2】:

      您需要将其发送给用户。所以,我认为你有一个 expressJS,用户可以使用你的 API 端点获取元素。

      在您完成所有问题后,您需要将其发送给用户。

      res.sendFile('/path/to/downloaded/s3/object')
      

      【讨论】:

        【解决方案3】:

        感谢@Rashomon 和@Martin do santos。 我必须添加客户端脚本以通过以下方式读取响应流并下载文件

        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);
        })
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-08-30
          • 2018-10-18
          • 2014-03-18
          • 2020-04-09
          • 2020-11-27
          • 1970-01-01
          • 2019-09-20
          • 1970-01-01
          相关资源
          最近更新 更多