避免过度写字blobs AZURE

时间:2013-06-06 09:35:53

标签: azure azure-storage azure-storage-blobs

如果我在已存在文件的同一容器中上传azure blob上的文件,它会覆盖该文件,如何避免覆盖该文件?下面我提到的情景...

step1 - 在名为“filecontainer”的容器中的azure上传文件“abc.jpg”

第二步 - 上传后,尝试将同名的不同文件上传到同一个容器

输出 - 它将使用最新上传的

覆盖现有文件

我的要求 - 我想避免这种覆盖,因为不同的人可能会将具有相同名称的文件上传到我的容器中。

请帮忙

P.S。

-i不想为不同的用户创建不同的容器

-i我正在使用带有Java的REST API

3 个答案:

答案 0 :(得分:4)

Windows Azure Blob存储支持使用条件标头,可以防止覆盖blob。您可以在此处详细了解条件标头:http://msdn.microsoft.com/en-us/library/windowsazure/dd179371.aspx

由于您希望不应覆盖blob,因此需要指定If-None-Match条件标头并将其值设置为*。这会导致上传操作失败,并显示Precondition Failed (412)错误。

其他想法是在上传之前检查blob的存在(通过获取它的属性)但是我不推荐这种方法,因为它可能会导致一些并发问题。

答案 1 :(得分:2)

您无法控制用户上传文件的名称。但是,您可以控制存储这些文件的名称。标准方法是生成Guid并相应地命名每个文件。冲突的几率几乎为零。

A simple pseudocode looks like this:

//generate a Guid and rename the file the user uploaded with the generated Guid
//store the name of the file in a dbase or what-have-you with the Guid
//upload the file to the blob storage using the name you generated above

希望有所帮助。

答案 2 :(得分:1)

让我这样说:

  • 第一步 - user X上传文件“abc1.jpg”并将其保存到本地文件夹XYZ
  • 第二步 - user Y上传另一个同名“abc1.jpg”的文件,现在又将其保存在本地文件夹XYZ

你现在做什么?

有了这个,我说明你的问题与Azure没有任何关系!

保存文件时不要依赖原始文件名。无论你在哪里拯救他们。生成随机名称(例如GUID)并将原始名称“附加”为元数据。