使用fineUploader直接上传到S3时出现403错误,没有服务器端代码

403 error when using fineUploader to upload directly to S3 with no server side code

我遵循了本教程 http://blog.fineuploader.com/2014/01/15/uploads-without-any-server-code/ 并取得了很好的进步,但我又被难住了。

这是我的存储桶的 CORS 策略(我假设这是错误所在):

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>https://www.xxxdomainxxx.fr</AllowedOrigin>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>DELETE</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <ExposeHeader>ETag</ExposeHeader>
    <AllowedHeader>content-type</AllowedHeader>
    <AllowedHeader>origin</AllowedHeader>
    <AllowedHeader>x-amz-acl</AllowedHeader>
    <AllowedHeader>x-amz-meta-qqfilename</AllowedHeader>
    <AllowedHeader>x-amz-date</AllowedHeader>
    <AllowedHeader>authorization</AllowedHeader>
    <AllowedHeader>x-amz-security-token</AllowedHeader>
</CORSRule>
</CORSConfiguration>

上传正常(我看到了进度条)并且遍历了整个文件,但是在上传结束时,UI 切换到 "processing" 然后我得到一个"access denied" 消息且存储桶中没有文件。控制台打印:

Failed to load resource: the server responded with a status of 403 (Forbidden) (xxxxxxx.s3.amazonaws.com, line 0)

我从 AWS 收到 403 错误,我不确定如何调试它。看到有什么遗漏了吗?

感谢您的指点。

更新 1

我想我会尝试使用 CORS 文件的简化版本

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

但我遇到了同样的错误。 这是失败的 POST 请求:

key test test/c8491b98-284a-4d5d-90d4-f6ec7151bc1d.diff
AWSAccessKeyId  XXXXXXXXXXX
success_action_status   200
x-amz-security-token    XXXXXXXX
acl public-read
x-amz-meta-qqfilename   opentok.diff
policy  XXXXXX
signature   XXXXXXX
file    opentok.diff

以及响应

HTTP/1.1 403 Forbidden
Access-Control-Allow-Origin *
Access-Control-Allow-Methods    GET, POST, PUT
Access-Control-Max-Age  3000
Vary    Origin, Access-Control-Request-Headers, Access-Control-Request-Method
x-amz-request-id    8B619A5A96A954F6
x-amz-id-2  ZUPdtFRIdSKDK0ealKUKUCtHDW3GkNU5ZVZPDxlXPi/9J2oZiNcV3TltougJuhXnzY/BlbZrc1c=
Content-Type    application/xml
Transfer-Encoding   chunked
Date    Wed, 07 Oct 2015 08:11:24 GMT
Server  AmazonS3

问题不在于 CORS 配置,而在于用于存储桶的策略。资源字符串是

arn:was:s3:::bucketName

并且需要

arn:was:s3:::bucketName/*

像往常一样,细节决定成败...