- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试获取一个预签名 URL 以将文件上传到 S3 存储桶。这是我的工作流程:
<强>1。调用 Lambda -> 2.获取预签名 URL -> 3.使用文件命中 URL (PUT)
<强>1。调用 Lambda
我确保 AWS key 具有正确的权限。事实上,它具有完全访问权限。这是源代码:
AWS.config.update({
accessKeyId: '*****************',
secretAccessKey: '*****************',
region: 'us-east-1',
signatureVersion: 'v4'
});
let requestObject = JSON.parse(event["body"]);
let fileName = requestObject.fileName;
let fileType = requestObject.fileType;
const myBucket = 'jobobo-resumes';
s3.getSignedUrl('putObject', {
"Bucket": myBucket,
"Key": fileName,
"ContentType": fileType
}, function (err, url) {
if (err) {
mainCallback(null, err);
} else {
mainCallback(null, url);
}
}
因此,我从请求中获取文件名、文件类型 (MIME) 并使用它来创建签名。
<强>2。获取预签名 URL当我点击 Lambda 时,我得到了预签名的 URL。现在,我将使用此 URL 将文件上传到 S3。
<强>3。使用文件命中 URL (PUT)
现在,我使用 HTTP 方法访问 URL 并添加文件(二进制),查看我的 Postman 请求:
您可以看到我使用 PUT HTTP 方法发送了请求。我收到 403 错误。这是请求中的 header ,您可以看到内容类型是 image/jpeg
:
当我尝试使用 POST 方法时,我发现签名无效。我猜这是因为签名是为 PUT 方法签名的。
这是 S3 存储桶的设置:
由于访问被拒绝,我完全打开了存储桶,我的意思是Block Public access: off
。
设置有什么问题?也许是S3?
最佳答案
您在变量 s3
中有一个服务对象,但您没有在您的代码中显示该对象的构造位置...但它似乎是之前 您调用 AWS.config.update()
,它不会以追溯方式重新配置您的 s3
对象。这些操作的顺序是个问题。
Updates you make to the global
AWS.config
object don't apply to previously created service objects.https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/global-config-object.html
如果您仔细观察生成的 URL,您会发现实际上正在使用 Lambda 执行角色凭证,这就是访问被拒绝的原因。
赠品是 URL 中的 AWSAccessKeyId 不是您的,它是一个以 ASIA
开头的 session key ,而不是像普通访问 key ID 那样的 AKIA
。此外,还有一个 session token x-amz-security-token
,它不会出现在使用静态凭证生成的 URL 中。此外,此 URL 是 Signature V2,因此当您更正凭据配置问题时,签名 URL 的格式将发生显着变化。签名 V4 URL 具有 X-Amz-Credential
而不是 AWSAccessKeyId
。
关于amazon-web-services - AWS S3 的 getSignedUrl 为 put 对象返回 403,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60353464/
我需要获取“bucket/loads/:loadID”路径中所有文件的 URL。我能够在名为"file"的数组中获取这些文件。然后我过滤它(我得到 endFiles 数组)。现在我只需要一个名为 ur
我有存储触发功能,可以调整上传的图像大小并将其替换到存储中,然后更新数据库中的 URL }).then(() => { console.log('Original file d
我正在尝试使用 file.getSignedUrl()通过 Google Cloud Functions (Nodejs) 从 Firebase Storage 获取下载 URL。我在 Cloud F
我正在使用 react-s3-uploader Node 包,它接受一个 signingUrl 来获取用于将对象存储到 S3 中的 signedUrl。 目前我已经配置了一个 lambda 函数(带有
在 localhost 上工作正常,但在服务器上不工作。所有返回的 URL 都已经过期。 AccessDenied Request has expired 2016-04-26T09:44:22Z2
是否可以在 S3 对象的 getSignedUrl 操作上设置 access-control-allow-origin?我一直在寻找 aws 文档中的可用参数列表,但不清楚。 更新:假设我在名为“te
我成功生成了一个签名 url,然后我可以在有限的时间内使用它从我的 s3 存储桶下载资源。但是,我正在尝试在此处记录的参数中使用 ResponseContentDisposition 属性: http
我的 Firebase 存储 getSignedUrl()下载链接工作几天,然后停止工作。错误信息是 SignatureDoesNotMatch The request signature we ca
我对 AWS 比较陌生。我想要做的就是将图像从我的应用程序上传到 aws S3 并下载它以在应用程序的另一个页面中查看图像。上传成功,能够在S3中看到上传的图片。但无法下载它,因为它会抛出以下错误。
我有一些非常简单的代码来生成 S3 URL。我从 SDK 返回的 URL 只有 S3 的基本路径。它不包含任何其他内容。为什么会这样? var AWS = require('aws-sdk'); va
我正在生成一个预签名 URL,以便我可以将文件上传到 S3 存储桶。 var params = {Bucket: 'xxxxxxx', Key: 'key', Expires: 60}; var ur
我的问题是,当我将响应通过管道传输到前端时,Safari(似乎 IOS 上的所有浏览器都一样)不显示视频。但是,这些视频会在所有浏览器的 Android 和 win/linux 桌面上显示。 请注意,
通过过期的 URL 访问 S3 资源时,我试图优雅地处理 403。目前它返回一个 amz xml 错误页面。我上传了一个 403.html 资源,并认为我可以重定向到该资源。 存储桶资源是我的应用程序
我有一个 http onCall 云函数,我想返回一个 signedURL 以允许我将文件上传到云存储桶 Previous question 它一直告诉我权限被拒绝,但我看不出问题出在哪里。函数 GC
在尝试获取 getObject 的签名 URL 时,我从 aws-sdk 库收到以下错误: \node_modules\aws-sdk\lib\util.js:983 return str
这是我与问题相关的云函数代码片段: // Somewhere outside the function import * as nodedt from 'node-datetime' ... // I
这是我与问题相关的云函数代码片段: // Somewhere outside the function import * as nodedt from 'node-datetime' ... // I
我正在尝试创建一个签名 URL 以允许从 AWS S3 存储桶下载文件。对于我的 Node.JS lambda 函数,我向它传递一个文件名,它将创建一个签名 URL,然后我在客户端触发该 URL 以下
我在我的项目中遇到了一个奇怪的问题,我无法找到我做错了什么。我正在尝试将图像上传到我的博客,并且我正在使用 aws s3 配置来执行此操作。我相信我的配置是正确的,但以防万一我将它们添加到那里: 这里
我正在尝试获取一个预签名 URL 以将文件上传到 S3 存储桶。这是我的工作流程: 1。调用 Lambda -> 2.获取预签名 URL -> 3.使用文件命中 URL (PUT) 1。调用 Lamb
我是一名优秀的程序员,十分优秀!