FU 无法在版本 4 签名中上传分块文件
Posted
技术标签:
【中文标题】FU 无法在版本 4 签名中上传分块文件【英文标题】:FU fails to upload chunked files in version 4 signing 【发布时间】:2016-03-18 18:35:43 【问题描述】:我已成功升级到 FU 5.41 版,并认为我已经搞定了。我曾经并且继续能够上传到法兰克福。唯一的问题是,我使用的是 1MB 文件,然后当我尝试使用更大的文件时,它失败并出现错误“启动上传请求时出现问题”。 我可以确认,如果我在分块文件上传递第 2 版签名,它会正确上传,但会更改为第 4 版,但不会。是的,我在支持版本 2 和版本 4 的 S3 上做了这个例子。(否则它不会被证明)
我在 php 服务器端使用 S3 上传。 我正在传递正确的区域、版本号和预期的存储桶等以及 chun。
在 PHP 示例代码中,我注意到了预期的 s3 主机名,我在更改日志文档中看不到它是支持第 4 版签名所需的要求,不管我是否添加了这个...只是为了确定这是什么?例如 bucketname.s3.amazonaws.com 对吗?
任何想法,我哪里出错了,谢谢 您可能需要我提供任何额外信息吗?下面是从失败的http请求中复制的,希望是你想要的
Request URL:https://videodesktv-ingest-syd.s3.amazonaws.com/console/2_mumford_lover_of_the_light.mp4?uploads
Request Method:OPTIONS
Status Code:403 Forbidden
Remote Address:54.231.252.151:443
Response Headers
view source
Content-Type:application/xml
Date:Mon, 14 Dec 2015 04:29:06 GMT
Server:AmazonS3
Transfer-Encoding:chunked
x-amz-id-2:0dkXc0/yOnzrI6T9cClx6R6SQI8ixfs99rS5zX0nuCorHyVNh7CEWzbuNnay5KEmhQD1816MdRQ=
x-amz-request-id:D4EDCC40832B34AC
Request Headers
view source
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:authorization, content-type, x-amz-acl, x-amz-content-sha256, x-amz-date, x-amz-meta-qqfilename
Access-Control-Request-Method:POST
Connection:keep-alive
Host:videodesktv-ingest-syd.s3.amazonaws.com
Origin:https://videodesk.tv
Referer:https://videodesk.tv/1/console
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/47.0.2526.80 Safari/537.36
【问题讨论】:
哪个特定请求失败了? 我专门询问http请求。哪一个失败了?是对您的签名服务器的请求、对 S3 的 POST 还是对 S3 的第一个 PUT?对于失败的请求,响应状态和正文是什么? 当前问题不清楚... 最好编辑答案以包含有关确切失败的 HTTP 请求的信息,以及该请求的状态代码和响应负载。此外,如果问题似乎与签署请求有关,请包含您调整以适应您的环境的示例 PHP 文件中的标头信息。 【参考方案1】:根据您问题中发布的 HTTP 请求详细信息,OPTIONS 请求未能发送至您的 S3 存储桶。在 CORS 的上下文中,这称为“预检”请求,由浏览器发送,作为发送底层请求之前的安全检查(在这种情况下,一系列请求中的第一个请求需要将文件以块的形式上传到 S3 )。
对此预检的响应是 403,这表明您的 S3 存储桶没有正确的 CORS 配置。请密切注意预检请求中的以下标头:
Access-Control-Request-Headers:authorization, content-type, x-amz-acl, x-amz-content-sha256, x-amz-date, x-amz-meta-qqfilename
Access-Control-Request-Method:POST
您的存储桶的 CORS 设置必须配置为接受 POST 方法和“Access-Control-Request-Headers”标头中列出的标头。
此外,请确保还列出了“https://videodesk.tv”的来源。
【讨论】:
感谢您明确指出,它现在正在工作。我错过了列为 x-amz-content-sha256 的版本 4 签名的 NEW 标头 - 这就是版本 2 请求有效的原因。我可以建议将其添加到文档更改日志说明广告中,它没有被提及并且是绝对必需的。 我刚刚更新了 S3 server-side doc 以在 CORS 部分中包含此标头。【参考方案2】:除了用户现有的 CORS 配置,请注意您需要添加 x-amz-content-sha256
【讨论】:
我还想问一下,为什么在你的 PHP 示例中,当它似乎不需要时,只要预期的存储桶是正确的...... $expectedHostName = $_ENV[' S3_HOST_NAME']; // 仅限 v4 It is needed for v4.以上是关于FU 无法在版本 4 签名中上传分块文件的主要内容,如果未能解决你的问题,请参考以下文章
无法上传 targetSdkVersion 为 30 的签名 apk