azure - Azure REST API 接受某些文件类型,禁止其他文件类型
问题描述
我正在使用 Azure REST API 将文件从一个文件夹复制到另一个文件夹 ( https://docs.microsoft.com/en-us/rest/api/storageservices/copy-file )。所有文件和文件夹都在同一个帐户中,在同一个文件共享中,由同一个用户帐户通过门户上传。我正在使用 SharedKey 身份验证,并且所有请求的密钥都相同。身份验证部分代码来自https://github.com/Azure-Samples/storage-dotnet-rest-api-with-auth.git,请求来自该代码,适用于 Get/Copy 请求。
我的问题是尝试复制某些文件会导致403 Forbidden响应。这似乎与文件类型有关。文件扩展名不是一个因素。我可以复制 .jpg(和 .jpeg)、.txt 和 .pdf 文件。我无法复制 .exe、.mp4 或 .zip 文件。如果我在我的开发机器上重命名扩展名为 .jpg 的 .exe 文件,然后通过门户上传到/source文件夹,尝试通过 API 进行复制会导致禁止响应。文件大小不是一个因素,我成功复制了比问题文件类型大的实际 .jpg 文件。
我找不到任何例子或解释。测试详情如下。
(将 [myaccount] 替换为字符串,[some guid] 确认不为空且有效的 guid 值)
我的文件共享下的目录是:
/目的地
/资源
测试 01:将 th.jpeg 从源复制到目标
要求:
{Method: PUT, RequestUri: 'https://[myaccount].file.core.windows.net/[myshare]/destination/th.jpeg', Version: 1.1, Content: <null>, Headers:
{
x-ms-date: Wed, 27 Jan 2021 15:13:28 GMT
x-ms-version: 2017-04-17
x-ms-copy-source: https://[myaccount].file.core.windows.net/[myshare]/source/th.jpeg
Authorization: SharedKey [myaccount]:18sCuTcbEOA5TLC11hCEH0pkK93Ln/Wk1BSRy0ytEAA=
Request-Id: [value is same as failed requests]
}}
回复:
{StatusCode: 202, ReasonPhrase: 'Accepted', Version: 1.1, Content: System.Net.Http.HttpConnectionResponseContent, Headers:
{
ETag: "0x8D8C2D61A12C96B"
Server: Windows-Azure-File/1.0
Server: Microsoft-HTTPAPI/2.0
x-ms-request-id: [some guid]
x-ms-version: 2017-04-17
x-ms-copy-id: [some guid]
x-ms-copy-status: success
Date: Wed, 27 Jan 2021 15:13:28 GMT
Content-Length: 0
Last-Modified: Wed, 27 Jan 2021 15:13:28 GMT
}}
对以下文件的相同请求有效:
- 11866.jpg 207.77 千字节
- 煎饼.jpg 6.26 MiB
- 分包商.pdf 232.36 KiB
- 文本.txt 908 B
测试 02:将 2M.jpg 从源复制到目标
要求:
{Method: PUT, RequestUri: 'https://[myaccount].file.core.windows.net/[myshare]/destination/2M.jpg', Version: 1.1, Content: <null>, Headers:
{
x-ms-date: Wed, 27 Jan 2021 15:16:51 GMT
x-ms-version: 2017-04-17
x-ms-copy-source: https://[myaccount].file.core.windows.net/[myshare]/source/2M.jpg
Authorization: SharedKey [myaccount]:QWYuXaE0Djs8k3xtOYMpZ831zX/mVD1Kwx1jgwDK9Oo=
Request-Id: [value is same as successful requests]
}}
回复:
{StatusCode: 403, ReasonPhrase: 'Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.', Version: 1.1, Content: System.Net.Http.HttpConnectionResponseContent, Headers:
{
Server: Microsoft-HTTPAPI/2.0
x-ms-request-id: [some guid]
Date: Wed, 27 Jan 2021 15:16:51 GMT
Content-Length: 763
Content-Type: application/xml
}}
对以下文件的相同请求以相同的状态和原因失败:
- 15M.jpg 15.13 MiB
- 2M.jpg 2.77 MiB
- 7M.jpg 7.77 MiB
- FCVideo.jpg 106.09 MiB
- FCVideo.mp4 106.09 MiB
- FluentConference.zip 1020.49 MiB
上述列表中的所有 jpg 文件实际上都是已重命名的 .exe 或 .zip 文件。
解决方案
推荐阅读
- java - Junit Jupiter 5(Intellij)无法识别导入 org.junit.jupiter.api.Test 类
- css - 双循环断点 + 容器宽度,如 Bootstrap
- excel - 从 Word 将表格导入 Excel 会省略第一个表格中的第一行
- http - 当我们在 TCP 数据包中有端口号时,为什么我们在 HTTP 的 HOST 标头中需要端口号?
- typescript - 如何序列化 Typescript 类型信息?
- postgresql - PostgreSQL - ORDER BY with LIMIT 未按预期使用索引
- visual-studio-code - 将文件移动到 Angular 应用程序中的新文件夹中
- sorting - 如何在谷歌表格中展平矩阵后根据时间戳对答案进行排序?
- python - Selenium TimeOut --> 找不到定位器
- flutter - “字符串?”类型的值 不能分配给“字符串”类型的变量颤动