我试图上传一个图像使用预先签名的网址
const s3Params = {
Bucket: config.MAIN_BUCKET,
Key: S3_BUCKET + '/'+fileName,
ContentType: fileType,
Expires: 900,
ACL: 'public-read'
};
const s3 = new AWS.S3({
accessKeyId: config.accessKeyId,
secretAccessKey: config.secretAccessKey,
'region': config.region
});
const url = await s3.getSignedUrlPromise('putObject', s3Params)
return url
我得到了一个类似的url
https://s3.eu-west-1.amazonaws.com/bucket/folder/access.JPG?AWSAccessKeyId=xxxx
但似乎什么都不管用
错误总是:
我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法。
Access凭据具有适当的权限,因为在尝试通过对象上载(通过api而不是预先签名的url)时,这些上载文件可以正常运行
编辑:
邮递员似乎正在以多部分/表单数据的形式发送内容类型;边界=----------------------------336459561795502380899802。这里添加了额外的边界。如何解决这个问题?
我在测试邮递员的表格数据。但是getsignedUrl()函数不支持这一点。尝试使用二进制,效果很好。对于multipart,aws sdk中似乎有一个不同的函数
根据AWS S3文档签名和验证REST请求,S3默认使用SignatureVersion4。
但是nodejs AWS-SDK默认使用SignatureVersion2。
因此,您必须在请求标头中显式指定SignatureVersion4
在S3配置中添加此代码
s3 = new AWS.S3({
'signatureVersion':'v4'
});
标题说明一切。这是我的代码; 我使用节点强大的文件。 成功上传后,url变量返回s3 url,类似以下内容; 下面是我的参数 我错过了什么?
我试图上传图像/视频使用PHP/Javascript到AWS S3 这是我的PHP代码 这是我的Java脚本代码 所有这些功能工作伟大,我想即使在执行它给我文件上传成功消息too.but当我检查s3什么都没有。 即使在控制台中,它也会像下面一样生成预签名URL。但当我尝试单击它时,它会给我SignatureDesNotMatch错误。(请单击URL)。可能是什么错误。。? https://ibra
我很感激你的帮助!多谢
我想将用户配置文件图片存储在S3桶中,但保留这些图片的私密性。为了做到这一点,我正在创建一个预先签名的网址,每当图像是必需的。然而,这每次都会创建一个独特的网址,这意味着浏览器永远不会缓存图像,最终我会在GET请求中支付更多。 下面是生成url的代码示例,我使用的是Laravel: 我认为,通过指定日期时间而不是时间单位,它将创建相同的url,但实际上会将剩余秒数添加到url,下面是一个示例: x
我遵循了关于这个问题的说明https://github.com/aws/aws-sdk-go/issues/467,其中清楚地记录了如何为PUT请求创建预签名的url。目标是预置url,这样我就可以安全地直接从浏览器上传图像
有没有办法让预签名的aws上传URL在出现错误时返回json响应,而不是xml响应。 目前,如果url过期,它会返回如下内容。 如果这是json响应就好了。