【发布时间】:2021-02-23 21:14:17
【问题描述】:
我正在学习使用 React 和 Node 从 Amazon S3 下载文件。这个想法是,当我点击客户端的下载按钮时,文件下载应该会自动开始。到目前为止,我已经设法使用下面的代码从后端获取预签名的 URL。
index.js
const express = require("express");
const downloadRoutes = require("./routes/downloadRoutes");
const app = express();
app.use("/api/download", downloadRoutes);
app.listen(5000, () => {
console.log("Server listening on port 5000");
});
routes/downloadRoutes.js
const express = require("express");
const dotenv = require("dotenv");
const AWS = require("aws-sdk");
dotenv.config();
const router = express.Router();
const s3 = new AWS.S3({
accessKeyID: process.env.AMAZON_ACESS_KEY_ID,
secretAccessKey: process.env.AMAZON_SECRET_ACCESS_KEY,
});
router.get("/", (req, res) => {
s3.getSignedUrl(
"getObject",
{
Bucket: "download-hemanta-cv",
ResponseContentType: "application/pdf",
Key: "CV_Hemanta_Sundaray.pdf",
},
(err, url) => {
console.log("Error", err, "url", url);
if (err) {
next(err);
} else {
res.send(url);
}
}
);
});
module.exports = router;
我面临的问题是当我将 URL 粘贴到 chrome 中时,我收到以下消息。
在浏览器中打开 URL 时如何查看 PDF 文件?
【问题讨论】:
-
试试这个
const s3 = new AWS.S3({ signatureVersion: "v4", accessKeyID: ..., secretAccessKey:... }),我们可以在初始化对象的时候传递signatureVersion来用V4对请求进行签名
标签: node.js amazon-web-services amazon-s3