如何从AWS S3将文件下载到客户端设备?

时间:2018-01-26 06:13:09

标签: javascript node.js amazon-web-services amazon-s3

查看了有关如何将文件从S3下载到本地磁盘的所有教程。我已经遵循了所有解决方案,他们所做的是将文件下载到服务器而不是客户端。我目前的代码是

app.get('/download_file', function(req, res) {
  var file = fs.createWriteStream('/Users/arthurlecalvez/Downloads/file.csv');
  file.on('close', function(){console.log('done'); });
  s3.getObject({ Bucket: 'data.pool.al14835', Key: req.query.filename }).on('error', function (err) {
   console.log(err);
   }).on('httpData', function (chunk) {
      file.write(chunk);
   }).on('httpDone', function () {
       file.end();
   }).send();

  res.send('success')

 })

如何将此信息发送给客户端,以便将其下载到设备上?

4 个答案:

答案 0 :(得分:4)

S3支持通过AWS Javascript API生成预签名URL的功能。然后,用户可以GET此URL将S3对象下载到本地设备。

See this question for a Node.js code sample.

答案 1 :(得分:0)

您可以像这样使用SignedURL

var params = {Bucket: bucketname , Key: keyfile , Expires: 3600 , ResponseContentDisposition :  `attachment; filename="filename.ext"` };
var url = s3.getSignedUrl('getObject', params);

生成的链接将强制使用文件名filename.ext

下载

答案 2 :(得分:0)

如果你有文件 URL,你可以这样做,

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="questions">
  <div class="question active">Some question 1</div>
  <div class="question">Some question 2</div>
  <div class="question">Some question 3</div>
  <div class="question">Some question 4</div>
  <div class="question">Some question 5</div>
  <div class="question">Some question 6</div>
  <div class="question">Some question 7</div>
  <div class="question">Some question 8</div>
</div>
<button type="button" id="back">Back</button>
<button type="button" id="next">Next</button>

文件网址是: https://BucketName.Region.amazonaws.com/Key 只需替换为您的 Bucket 名称、Region 和 Key

答案 3 :(得分:0)

您可以使用 res.download 方法 http://expressjs.com/en/api.html#res.download ?