Amazon web services Can';t通过邮递员使用预先签名的URL将文件上载到S3。错误:SignatureDesNotMatch
如何将带有签名URL的文件上载到S3 我尝试了以下方法:Amazon web services Can';t通过邮递员使用预先签名的URL将文件上载到S3。错误:SignatureDesNotMatch,amazon-web-services,amazon-s3,postman,pre-signed-url,Amazon Web Services,Amazon S3,Postman,Pre Signed Url,如何将带有签名URL的文件上载到S3 我尝试了以下方法: const AWS = require('aws-sdk'); const s3 = new AWS.S3({ accessKeyId: "", secretAccessKey: "" }); const url = s3.getSignedUrl("putObject", { Bucket: "SomeBucketHere", Key: "SomeNameHere", ContentType: "b
const AWS = require('aws-sdk');
const s3 = new AWS.S3({ accessKeyId: "", secretAccessKey: "" });
const url = s3.getSignedUrl("putObject", {
Bucket: "SomeBucketHere",
Key: "SomeNameHere",
ContentType: "binary/octet-stream",
Expires: 600
});
但是,当我尝试使用以下步骤与Postman一起上传时,我得到了SignatureDesNotMatch
错误
binary
(单选按钮),选择文件,选择要上载的文件有什么问题吗?如何测试我的签名URL?这个问题曾经让我感到非常痛苦 我所要做的就是在邮递员请求中添加一个标题 标题:
内容类型=二进制/八位字节流
一旦我改变了这一点,文件上传成功
希望这能为以后的人省去很多麻烦。不确定这是否有任何帮助,但我相信你需要通过签名版本 在python中,您有如下内容:
import boto3 as boto3
from botocore.client import Config
...
s3_client = boto3.client('s3', config=Config(signature_version='s3v4'))
url = s3_client.generate_presigned_url(
ClientMethod='put_object',
Params={
'Bucket': bucket,
'Key': key,
},
ExpiresIn=60
)
print url
因此,Javascript中的等价物是:
var AWS = require('aws-sdk');
var s3 = new AWS.S3({
signatureVersion: 'v4',
});
exports.handler = (event, context, callback) => {
const url = s3.getSignedUrl('putObject', {
Bucket: '**\[YOUR-S3-BUCKET\]**',
Key: 'mykey',
Expires: 10,
});
callback(null, url);
};
资料来源: