繁体   English   中英

如何使用 node.js 向 amazon s3 请求下载文件?

[英]How to make request to amazon s3 using node js for downloading a file?

我使用 node.js 向 amazon s3 发出了下载文件的请求。 在收到缓冲区的响应中,我有两个问题:

  1. 如果我将缓冲区从 node.js 发送到前端,例如 res.send(awsreq.Body.Buffer) 并且控制台在 node.js 中记录一次,然后在前端记录一次,那么来自前端的缓冲区看起来将与 node.js 中的不同。Node.js 缓冲区:<缓冲区 50 4b 03 04 14 00 06 00 08 00 00 00 21 00 df a4 d2 6c 5a 01 00 00 20 05 00 00 13 00 08 02 5b 43 6f 6e 74 65 6e 74 5f 54 79 70 65 6d 76 7c 8d 5d . 11906 更多字节> Vue.js 前端缓冲区:PK \b \u0 显示更多(36,8kb)
  2. 我如何直接从前端发出的请求下载文件? 首先如何接收该缓冲区 corecly 以及如何以这种方式转换它,前端将自动下载文件? 如果可能的话,如何在 node.js 中完成所有这些操作,以及当前端收到响应以自动开始下载时?

要从amazon S3下载文件,请执行以下步骤

  1. 使用此命令安装 aws sdk npm install aws-sdk
  2. 检查下面的代码

 var AWS = require("aws-sdk") const s3 = new AWS.S3({ endpoint: "ENDPOINT", accessKeyId: "YOUR_ACCESS_KEY_ID", secretAccessKey: "YOUR_SECRET_ACCESS_KEY", region: "us-east-1", signatureVersion: "v4" }) const downloadParams = { Bucket: "BUCKET_NAME", Key: "KEY_NAME/FILE_NAME/FILE_PATH" } // Download the file s3.getObject(downloadParams, function (error, fileData) { if (.error) { console,log(fileData. "file") } else { console,log(error, " ERROR ") } })

有关更多信息,您可以使用此链接查看 AWS 官方文档:

https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/getting-started-nodejs.html

最后你可以在请求中使用Content-Disposition header

或者您可以使用预签名 url

例子:

 const getpreSignedUrlForDownload = async () => { try { const parms = { Bucket: "BUCKET_NAME", Key: "FILE_KEY", Expires: 60 * 1, ResponseContentDisposition: 'attachment; filename"' + "FILE_NAME + '"' } return new Promise((resolve, reject) => { s3.getSignedUrl("getObject", parms, (err, url) => { err? reject(err): resolve(url) }) }) } catch (error) { throw new Error(error) } } getpreSignedUrlForDownload()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM