通过 OPTIONS 后 S3 CORS 上传中止

Posted

技术标签:

【中文标题】通过 OPTIONS 后 S3 CORS 上传中止【英文标题】:S3 CORS upload aborts after passing OPTIONS 【发布时间】:2013-02-03 07:29:29 【问题描述】:

我正在尝试从浏览器上传文件,但它根本不起作用。

我的存储桶 CORS 配置是:

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

在我的代码中我发送这个:

xhr.open('PUT', "http://upload.test.s3.amazonaws.com/" + uploadFile.get("dest") +'?' +   "partNumber=" + (part + 1) +  "&" + "uploadId=" + uploadFile.get("uploadId"), true);
xhr.setRequestHeader("Authorization", uploadFile.get("authorization"));
xhr.setRequestHeader("x-amz-date", uploadFile.get("date"));
xhr.setRequestHeader("Content-Type", uploadFile.get("rawFile").type);
xhr.setRequestHeader("x-amz-acl", "public-read");
xhr.send(chunk);

Ps:uploadFile 有一些属性,例如来自服务器的授权密钥和uploadId。

当开始上传时,我通过了 OPTIONS 请求,但 Put 请求在几秒钟后中止(通常在发送一些内容百分比后 4-5 秒)。不幸的是,它在没有反馈的情况下中止。 有谁知道会发生什么??

谢谢!

编辑:基本上我使用https://github.com/LearnBoost/knox 从分段上传中获取 UploadId(如果我使用服务器进行整个上传操作,它就可以工作)

【问题讨论】:

【参考方案1】:

如果您使用 CORS 授权,服务器似乎无法使用通配符(即“*”):检查 this out。

您是否尝试在存储桶的 AllowedOrigin 标头中指定请求域?

【讨论】:

以上是关于通过 OPTIONS 后 S3 CORS 上传中止的主要内容,如果未能解决你的问题,请参考以下文章

允许使用 Amazon S3 的 OPTIONS HTTP 方法

为啥从浏览器上传到 S3 时出现 403 错误?

CORS 上传文件到 S3,得到 SignatureDoesNotMatch 错误

Amazon S3 CORS 标头仅在 OPTIONS(预检)期间显示,而不在 GET 请求期间显示

AWS S3 SDK:中止正在进行的 putObject 上传

使用预签名 URL 将文件上传到 Amazon S3 时出现 CORS 错误