1

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

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

step2 - 上传后,尝试将一些具有相同名称的不同文件上传到同一个容器

输出 - 它将用最新上传的文件覆盖现有文件

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

请帮忙

附言

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

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

4

3 回答 3

4

Windows Azure Blob 存储支持条件标头,您可以使用这些标头防止覆盖 Blob。您可以在此处阅读有关条件标头的更多信息:http: //msdn.microsoft.com/en-us/library/windowsazure/dd179371.aspx

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

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

于 2013-06-06T11:48:17.003 回答
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

希望有帮助。

于 2013-06-06T11:18:58.543 回答
1

让我这样说:

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

你现在做什么?

我以此说明您的问题与 Azure 没有任何关系!

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

于 2013-06-06T11:15:34.733 回答