oss web 直传获取token 后,修改Content-Disposition中的路径会将文件给覆盖,
policy 限制了 key 的路径也没有用,一样能修改
{"expiration":"2018-05-10T10:14:49.252Z","conditions":[["eq","$key","image/tenant/logo/20180510/1525947251000-150935638.jpg"],["content-length-range",0,620888],["starts-with","$key","image/tenant/logo/20180510/"]]}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在阿里云OSS(Object Storage Service)中,直接通过Web直传并使用STS Token进行权限控制时,确实可能会遇到您描述的问题。Content-Disposition是一个HTTP头部字段,用于指示响应的内容应该以何种形式展示,例如作为附件下载时的文件名。如果在上传过程中修改了这个值导致文件被意外覆盖,这通常是因为上传策略没有严格限制对象的Key(即文件路径)。
从您提供的policy来看,您已经尝试通过starts-with
条件限制了Key的前缀,确保上传的文件路径必须以image/tenant/logo/20180510/
开头。理论上,这应该能够防止上传到其他路径从而覆盖不同名称的文件。但是,如果仍然出现了覆盖情况,可能的原因有:
Policy条件未正确应用:请确认生成的签名请求中确实包含了上述的policy条件。有时候,错误的实现或遗漏可能导致这些限制条件没有生效。
客户端逻辑问题:在实际的上传操作中,客户端代码可能允许或错误地修改了Content-Disposition
字段,并且同时没有严格遵循policy中定义的Key格式,导致虽然文件名在Content-Disposition中变化,但实际上传的Key(即文件路径)并未改变,从而覆盖了原有文件。
OSS服务端配置:虽然这种情况较为少见,但理论上如果OSS bucket有特殊配置,比如开启了某些非标准的行为模式,也可能影响文件上传的行为。
解决办法:
加强Policy限制:除了使用starts-with
外,确保在生成Policy时,如果可能,更精确地指定Key,避免任何可能的路径覆盖。但请注意,过于严格的Key定义可能会影响业务灵活性。
客户端逻辑检查与修正:审查并修正客户端上传逻辑,确保在构造上传请求时,严格遵守后台生成的Policy条件,尤其是关于Key的定义,同时正确处理Content-Disposition,避免其影响文件存储路径。
使用OSS SDK辅助上传:推荐使用阿里云官方提供的OSS SDK进行文件上传,这些SDK通常会对上传参数进行合理的封装和验证,减少因手动构造请求而引入的错误。
日志与调试:开启并仔细检查OSS操作相关的日志,包括客户端和服务端日志,以便于定位问题所在。
如果问题依旧无法解决,建议联系阿里云技术支持,提供详细的错误信息和操作步骤,以便获得更专业的帮助。