记一次使用阿里云oss中出现的特殊字符ecoder导致的问题
由于公司业务需求, 需要为购买了私有云的客户进行oss数据迁移, 在数据迁移完成后, 发现大量的图片显示不出来
迁移的方案
客户原本购买的公司平台账号, 其使用的数据全部储存在公司的oss文件服务器上, 例如, 某图片的url为:
https://example.domain.com/test-Picture/2019_03_22-11_41_50.jpg
由阿里云oss的规则, 其图片在oss上存储的路径(objectKey)为test-Picture/2019_03_22-11_41_50.jpg
现在需要将该图片迁移到客户自己的oss上, 采用的方式为objectKey不变, 替换为客户的oss域名上传, 上传完成后, 新的图片url应该为:
https://example.new-domain.com/test-Picture/2019_03_22-11_41_50.jpg
问题原因
在oss上根据路径查到该文件后, 发现文件的路径是正确的, 但如果该路径中出现了例如%, 这样的特殊字符的时候, oss会自动帮我们encoder一下, 导致下载的图片url会变.
如果上述描述看不懂的, 可以看下面的例子:
- 原图片url为: https://example.domain.com/test-Picture/%E5%89%AF%E6%9C%AC.jpg
- 上传到新oss上后, 文件路径仍然为: test-Picture/%E5%89%AF%E6%9C%AC.jpg
- 但使用: https://example.new-domain.com/test-Picture/%E5%89%AF%E6%9C%AC.jpg这个地址无法下载文件
- 路径中的特殊字符"%"在上传到oss上后, 其字符已经被encoder过
- 正确的下载路径为: https://example.new-domain.com/test-Picture/%25E5%2589%25AF%25E6%259C%25AC.jpg