我试图上传一个文件到亚马逊S3使用PUT请求。我生成我的签名网址使用boto。如果我做了
curl --upload-file test.jpg $SIGNED_URL
然后上传工作正常(所以签名网址没有问题)。我还将裁判设置为卷曲的各种东西,它仍然有效,所以我也不认为有CORS问题。我试图上传一个文件blob使用javascript如下:
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("PUT", $SIGNED_URL);
xmlhttp.setRequestHeader('Content-Type', blob.type);
xmlhttp.send(blob);
这总是返回403禁止的错误。我发现在网上很难找到任何关于从javascript将数据放入S3的信息。我现在意识到发布表单数据更为常见,但有没有办法修改我正在做的工作以使其也能正常工作?
编辑:我现在找到了错误主体:
> <Error><Code>SignatureDoesNotMatch</Code> <Message>The request
> signature we calculated does not match the signature you provided.
> Check your key and signing method.</Message>
因此,似乎签名是个问题。同样,当我将url与curl一起使用时(即使在javascript中失败之后),同样的url也可以工作。
对我来说,问题是我在生成预签名URL时没有设置内容类型,所以在生成预签名URL时添加了这一点
java.util.Date expiration = new java.util.Date();
long msec = expiration.getTime();
msec += 60 * 60 * 1000; // 1 hour.
expiration.setTime(msec);
GeneratePresignedUrlRequest generatePresignedUrlRequest =
new GeneratePresignedUrlRequest("bucket_name", "someRandomKey");
generatePresignedUrlRequest.setMethod(HttpMethod.PUT); // Default.
generatePresignedUrlRequest.setExpiration(expiration);
generatePresignedUrlRequest.setContentType("application/octet-stream");
URL s = s3Client.generatePresignedUrl(generatePresignedUrlRequest);
System.out.println("Secure PUT URL is "+s);
这是卷曲
curl -v -X PUT \
'generated_secure_url' \
-H 'Content-Type:application/octet-stream' \
--data-binary '@swiggy-hackathon.jpg'
问题是curl没有发送的“内容标题”。Chrome发送这个标题,不管你是否显式添加它。要获得一个可使用此标头的签名url,您需要将标头={'Content-Type': type}传递到boto中的generate_url。
我上传一个文件到AmazonS3有问题。我开发了一个Grails RESTful服务,它使用AWS Java SDK生成预签名URL。当客户端上传一个文件时,它首先检索一个预签名的URL,然后使用这个将文件直接上传到我的S3 bucket。所以我有一个Grails服务,它创建了一个预签名的URL,如下所示...
这里是我的node.js预签名URL的生成 那么我在URL生成或卷曲方面的问题在哪里呢?谢谢
我有一个亚马逊S3的postdata预签名网址。我想用它在一个空手道功能文件上传一个文件(说:pdf) 下面是一个示例Curl请求,我需要使用空手道POST请求执行它 我从服务器得到一个响应(具有预签名),并在功能文件中使用下面的代码 我试过了 我看到空手道日志的请求格式是:18:29:08.560[ForkJoinPool-1-worker-3]DEBUG-com。凭直觉。空手道-请求: 我看到
我知道使用以下方法限制对象的上载大小:http://doc.s3.amazonaws.com/proposals/post.html#limiting_uploaded_content 但是我想知道如何在服务器端以IAM用户的身份使用S3 SDK生成预签名url的同时完成。
问题内容: 我正在尝试使用预签名的URL将文件上传到Amazon的S3。我从生成URL的服务器获取URL,并将其作为JSON对象的一部分发送给我。我将URL作为字符串获取,如下所示: https://com-example-mysite.s3-us- east-1.amazonaws.com/userFolder/ImageName?X-Amz-Security- Token=xxfooxx%2F
我想检查一堆URL是否正常工作。因此,我编写了一些代码(如下所示)来实现这一点。它适用于像谷歌这样的网站。通用域名格式。当我把它应用到我的场景中时,它失败了。 我正在登录虚拟机。从这个虚拟机,我可以在浏览器中打开所需的URL。当我尝试检查是否可以用代码连接到URL时,它失败了。我的代码从文件中获取的URL是正确的,可以在浏览器上运行。因此,排除了URL中的错误。 我的服务器URL如下所示- 如何调