OSS文档的5.4.6的细节分析6中提及:
6) 如果设定了长度,但是没有发送消息 Body,或者发送的 body 大小小于给定
大小,服务器会一直等待,直到 time out,返回 400 Bad Request 消息。错
误码:RequestTimeout。此时 OSS 上的这个文件内容是用户已经上传完的数
据。
这样的设定非常糟糕。设想有两各客户端A和B,在A上传一个较大的文件到OSS的过程中,B去尝试下载该文件会成功,但实际上下载到的是不完整的文件。如果没有对文件校验就使用会带来不可预知的后果。即使校验出是不完整的文件,B的流量也已经浪费掉了。
上传文件显然应该是个事务性动作。我认为OSS不应该让不完整的文件被客户端下载到,以避免上述问题。或至少在put object的时候提供事务参数。
-------------------------
引用第3楼wood23于2012-11-08 14:32发表的 回1楼ap4249e0w的帖子 :
OSS已经返回了400或者根本没有返回200,这个时候这个object是可能会不完整的。建议在上传的时候判断返回码是否为200,并在上传文件的时候自定义header例如x-oss-meta-md5, 用来下载的时候建议文件的完整性。
-------------------------
引用第6楼sanbo于2012-11-09 19:55发表的 :
楼主,对于传统文件系统,写文件写到一半异常退出,操作系统也会留一个不完整的文件在磁盘上。
对于多个客户端同时写同一个Object的情况,最后的Object会写成什么样子是无法预知的。我们目前建议用户在自己的逻辑端避免这种并发写的问题(因为传统的文件系统也不支持对同一个文件的并发写)。
目前我们推荐的标准解决方案是:
1. 生成一个UUID作为Object的名称,然后客户端把数据写入这个Object;
.......
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。