0

根据本网站和其他来源的示例,我尝试了许多不同的方法,但我遇到了障碍。在一个多月的日常尝试不同的事情后未能使其正常工作后,我使用适用于 aws-php-sdk-2.7.1 的最新版本的 AWS 开发工具包将其缩小到以下范围。你认为它会起作用吗?我正在尝试做的是允许用户使用 javascript 编辑网页,捕获 Div 中的标记并使用 Amazon S3 上的签名 URL 将其放入存储桶。我收到一个错误,表明我的签名方法不正确。我是否得出错误的结论,即 SDK 应该为我完成这项工作,或者我做错了什么。我的密钥和密码在使用带有 PUT 的 JAVA 时工作正常,但我需要一个在客户端工作的解决方案。没有 SDK 的其他方案使用其他方式来签署 URL,但我也无法让这些方式在这里工作……我真的可以使用一些帮助。谢谢你。

这就是我目前所在的位置。

我在桶上的 Cors:////////////////////////////////////// ///////////////

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedOrigin>*:8443</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>PUT</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>DELETE</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>
4

2 回答 2

0

如 jQuery 网站 ( http://api.jquery.com/jquery.ajax/ ) 所述,并非所有浏览器都支持“PUT”和“DELETE”请求。

于 2014-10-24T23:36:29.460 回答
0

来自浏览器的请求包含Content-Type预签名 URL 中不存在的标头,导致签名无效。您需要在签名中包含该信息,就像您直接在 PHP 中执行 PUT 操作一样。我无法找到与您用于执行该请求的语法相匹配的文档,但AWS 开发工具包的 Github 问题表明以下内容应该有效:

$command = $client->getCommand("PutObject", array(
    'Bucket'      => ...,
    'Key'         => ...,
    'ContentType' => 'txt/html; charset=utf-8',
));

$url = $command->createPresignedUrl('+10 minutes');

顺便说一句,您当前使用的 Content-Type 无效。(这不会阻止上传工作,但会使其无法在浏览器中正确显示。)你想要text/html,而不是txt/html; MIME 类型通常不缩写。

于 2014-10-25T00:41:53.590 回答