首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从Node.js中的Amazon-S3获得签名URL

无法从Node.js中的Amazon-S3获得签名URL
EN

Stack Overflow用户
提问于 2021-02-22 17:49:24
回答 1查看 1K关注 0票数 1

我的目标是下载一个PDF文件,我已经保存在我的亚马逊S3桶。

正如您在下面的代码片段中所看到的,每当向/api/download发出GET请求时,我都会将url发回给客户机。

index.js

代码语言:javascript
复制
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.j

代码语言:javascript
复制
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",
      ContentType: "application/pdf",
      Key: "CV_Hemanta_Sundaray.pdf",
    },
    (err, url) => {
      res.send(url);
    }
  );
});

module.exports = router;

不过,当我以邮递员的身份向上述路线提出要求时,我并没有得到任何回应。我应该从亚马逊S3得到签名的网址。但是,状态代码是200 OK &没有错误。

我找不出问题。帮帮忙吧。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-22 20:46:14

我看到两件事:

  • ,它应该是ResponseContentType而不是ContentType,或者我们可以忽略它。
  • ,它返回200 Ok,因为res.send(url)是在成功和错误的情况下被调用的。

以下是修改后的方法:

代码语言:javascript
复制
router.get("/", (req, res, next) => {
  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);
      }
    }
  );
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66320844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档