【问题标题】:Avoid over-writing blobs AZURE避免覆盖 AZURE
【发布时间】:2013-06-02 06:10:16
【问题描述】:

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

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

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

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

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

请帮忙

附言

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

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

【问题讨论】:

    标签: azure azure-storage azure-blob-storage


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢 Gaurav 的回答,需要更多帮助,您能否指导我进行以下操作? stackoverflow.com/q/16958910/2381006 当我将此参数添加到标头时,我遇到了同样的异常:(
    【解决方案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
    

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      让我这么说吧:

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

      你现在在做什么?

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

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

      【讨论】:

        猜你喜欢
        • 2017-04-30
        • 2021-11-10
        • 1970-01-01
        • 2015-05-15
        • 1970-01-01
        • 1970-01-01
        • 2012-03-08
        • 2020-05-18
        • 2022-01-22
        相关资源
        最近更新 更多