gpt4 book ai didi

javascript - Amazon S3 CORS PUT 失败

转载 作者:太空狗 更新时间:2023-10-29 15:01:57 25 4
gpt4 key购买 nike

我正在尝试使用 REST Api 和 HTML5 文件切片将一个大文件 (1.5GB) 上传到 Amazon S3。上传代码如下所示(为了便于阅读,代码被精简):

File.prototype.slice = File.prototype.webkitSlice || File.prototype.mozSlice || File.prototype.slice;

var length = u.settings.chunk_size; // 6MB
var start = chunk * length;
var end = Math.min(start + length, u.file.size);

var xhr = new XMLHttpRequest();
var path = "/" + u.settings.key;

path += "?partNumber=" + chunk + "&uploadId=" + u.upload_id;

var method = "PUT";
var authorization = "AWS " + u.settings.access_key + ":" + signature;
var blob = u.file.slice(start, end);

xhr.upload.addEventListener("progress", progress_handler, true);
xhr.addEventListener("readystatechange", handler, true);
xhr.addEventListener("error", error_handler, true);
xhr.addEventListener("timeout", error_handler, true);

xhr.open(method, u.settings.host + path, true);

xhr.setRequestHeader("x-amz-date", date);
xhr.setRequestHeader("Authorization", authorization);
xhr.setRequestHeader("Content-Type", u.settings.content_type);
xhr.setRequestHeader("Content-Disposition", "attachment; filename=" + u.file.name);

xhr.send(blob);

chunk_size 是 6MB。一个 block 完成上传后,下一个 block 将随之而来,依此类推。但有时(每 80 个 block 左右),PUT 请求失败,e.type == "error"e.target.status == 0 (这让我感到惊讶)和 e.target.responseText == ""。 block 失败后,代码重新尝试上传它,并得到完全相同的错误。当我刷新页面并继续上传(相同的 block !)时,它就像一个魅力(80 个左右的 block ,当它再次卡住时)。以下是请求在 Chrome 开发工具中的样子:

enter image description here enter image description here enter image description here

知道为什么会发生这种情况,或者如何调试这样的事情吗?

编辑:这是OPTIONS 响应:

enter image description here

最佳答案

最终通过嗅探数据包发现了问题:有两个问题:

  1. 对于获得 4xxPUT 请求(未测试其他非 2xx 响应),xhr 请求返回为中止(状态 = 0);仍然没有找到解释,查看 Why does a PUT 403 show up as Aborted?

  2. Amazon S3 响应 403 表示 RequestTimeTooSkewed,因为我的签名是在上传开始时生成的,并在 15 分钟后(触发RequestTimeTooSkewed 错误),它失败了,必须重新生成签名。由于第一个问题,开发工具控制台或 js 代码中从未出现过 403 错误。

重新生成签名后,一切正常。

关于javascript - Amazon S3 CORS PUT 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12622343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com