在Azure blob上传中,如果您上传具有相同文件名的新文件(在同一容器中),则会覆盖文件。
我想在保存之前重命名新文件,以避免覆盖任何文件 - 这可能吗?
情景:
答案 0 :(得分:0)
您无法重命名blob(它没有API)。你的选择:
正如@juunas在评论中指出的那样:您必须管理您的工作流程,以避免在检查存在,重命名等方面存在潜在的竞争条件。
答案 1 :(得分:0)
我建议使用" If-None-Match:*"条件头(有时称为" If-Not-Exists"在客户端库中)。如果在PutBlob或PutBlockList操作中包含此标头,则调用将失败,并且不会覆盖数据。您可以捕获此客户端并重试上载操作(使用不同的blob名称。)
这比在上传之前检查blob是否存在有两个优点。首先,你不再有潜在的竞争条件。其次,调用Exists()会增加很多额外的开销 - 每次上传都需要额外的HTTP调用,这非常重要,除非你的blob非常大或延迟并不重要。使用访问条件时,您只需要在名称冲突时进行多次调用,这应该是一种罕见的情况。
当然,总是使用GUID可能更容易/更清洁,那么你不必担心它。
答案 2 :(得分:0)
需要重命名可能表明存在反模式。如果您的最终目标是在下载时更改文件名,则可以这样做,并保持Blob名称抽象且唯一。
您可以通过使用
分配ContentDisposition属性来设置http下载文件名attachment;filename="yourfile.txt"
这将确保在以公共或SAS url访问Blob时设置了标头。