【问题标题】:Unable to access PDF file in Amazon S3 bucket through presigned URL无法通过预签名 URL 访问 Amazon S3 存储桶中的 PDF 文件
【发布时间】: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


【解决方案1】:

对于发送到较新区域的请求,AWS S3 需要签名 V4。 Here 是文档的链接。

Amazon S3 支持签名版本 4,这是一种用于身份验证的协议 在所有 AWS 区域中对 AWS 服务的入站 API 请求。在这 时间,2014 年 1 月 30 日之前创建的 AWS 区域将继续 支持以前的协议,签名版本 2。任何新区域 2014 年 1 月 30 日之后将仅支持 Signature Version 4 和 因此,对这些区域的所有请求都必须带有签名 第 4 版。

要通过 aws sdk 发送签名请求,我们只需要在初始化对象时设置 signatureVersion。

const s3 = new AWS.S3({
  region: 'ap-south-1',
  signatureVersion: "v4",
  accessKeyID: process.env.AMAZON_ACESS_KEY_ID,
  secretAccessKey: process.env.AMAZON_SECRET_ACCESS_KEY 
});

【讨论】:

猜你喜欢
  • 2021-08-18
  • 1970-01-01
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
  • 2015-11-22
  • 2022-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多