记录OSS上传压缩包的一个坑

分享一下OSS上传遇到一个坑,希望可以给读者一些参考

背景

某系统需要上传文件功能,采用前端直传的模式,该功能支持jpg、jpeg、png、pdf、docx、rar、zip格式的文件上传,然而上线后,业务反馈rar、zip压缩包上传在获取token的时候报错。

报错如下:

<?xml version="1.0" encoding="UTF-8"?>
<Error>
  <Code>AccessDenied</Code>
  <Message>Invalid according to Policy: Policy Condition failed: ["eq", "$Content-Type", "application/x-rar"]</Message>
  <RequestId>68FB2A61BA68BD36329xxxxx</RequestId>
  <HostId>hr-contract.oss-cn-hangzhou.aliyuncs.com</HostId>
  <ExecCondition>["eq", "application/octet-stream", "application/x-rar"]</ExecCondition>
  <EC>0006-00000227</EC>
  <RecommendDoc>https://api.aliyun.com/troubleshoot?q=0006-00000227</RecommendDoc>
</Error>
<?xml version="1.0" encoding="UTF-8"?>
<Error>
  <Code>AccessDenied</Code>
  <Message>Invalid according to Policy: Policy Condition failed: ["eq", "$Content-Type", "application/zip"]</Message>
  <RequestId>68FB2A61BA68BD36329E1EF6</RequestId>
  <HostId>hr-contract.oss-cn-hangzhou.aliyuncs.com</HostId>
  <ExecCondition>["eq", "application/x-zip-compressed", "application/zip"]</ExecCondition>
  <EC>0006-00000227</EC>
  <RecommendDoc>https://api.aliyun.com/troubleshoot?q=0006-00000227</RecommendDoc>
</Error>

问题定位

从错误中看,其实是token中指定的MIME类型(application/x-rar、application/zip)与浏览器识别的MIME类型(application/octet-stream、application/x-zip-compressed)不一致,而代码中又采用的是MatchMode.EXACT 校验模式。

上线前后在自己设备(mac)上测试,都是没有问题可以上传的。很奇怪业务设备(windows)为什么会报错,问了一下ai,了解到:

image

查看业务浏览器,与自己设备都是一样的Chrome,版本也一致,基本排除旧版浏览器导致的。至此,问题确定,根本原因是操作系统差异导致的 MIME 类型识别不同。

解决方案

针对压缩文件,不采用 MatchMode.EXACT 转而采用 MatchMode.StartWith 模式,只校验开头就行了,因为开头都是 application/

posted @ 2025-10-30 16:55  cwp0  阅读(5)  评论(0)    收藏  举报