同一文件同时上传至Azure Blob Storage的行为疑问
Azure Blob Storage 同名文件同时上传的行为说明
嘿,针对你提到的两个疑问,我结合Azure Blob Storage的默认行为和可选配置来详细说明:
疑问1:是否先完成的上传会成功,另一个上传完成时因同名文件已存在而失败?
这取决于你上传时是否设置了条件请求头:
- 默认场景(无额外条件):Azure Blob Storage不会阻止后上传的文件覆盖已存在的Blob。也就是说,最后完成上传的那个请求会覆盖先完成的,不管谁先开始,先完成的内容会被后续的覆盖掉,不会直接失败。
- 如果你设置了条件头(比如
If-None-Match: *):这时候只有当目标Blob不存在时,上传才会成功。这种情况下,先完成上传的请求会成功创建Blob,后完成的请求会收到412 Precondition Failed的错误,也就是因同名文件已存在而失败。
疑问2:还是先启动的上传会成功,另一个检测到同一位置有写入流时立即失败?
默认情况下,Azure Blob Storage不会在上传过程中主动检测并阻止并发写入操作。两个不同实例的上传请求可以同时进行,不会在启动阶段就立即失败。最终的结果还是回到上面说的逻辑:要么最后完成的覆盖之前的,要么如果设置了条件头,先完成的成功,后一个失败。
如果想要避免这种并发覆盖的情况,你可以使用Blob租约机制:获取目标Blob的独占租约后,只有持有租约的客户端才能进行写入操作,其他客户端的写入请求会立即返回错误,这样就能确保同一时间只有一个上传操作能进行。
内容的提问来源于stack exchange,提问作者Web User
相关产品推荐
相关产品推荐

