Azure Rest API。如何创建文件夹并检查文件夹是否存在?

时间:2017-02-06 01:17:07

标签: azure azure-storage-blobs

我想使用azure blob rest api创建文件夹,还想检查文件夹是否存在。

Hierarchy:

arjun/images/
arjun/Videos/001.avi
arjun/Vidos/002.avi
img001.jpg
  

我尝试发送PUT请求以创建带路径的文件夹   例如"arjun/images/"

     
      
  1. 这会创建一个文件夹但不是空的。
  2.   
  3. 正在创建一个文件夹中没有名称的空文件。
  4.   

现在,即使这是正确的,另一个问题是当我想检查文件夹是否存在时:

  1. 我发送列表blob调用,前缀为文件夹的路径。
  2. 现在问题是空文件夹和文件夹之间的区别是不存在的,因为如果请求形成正确,则200 Ok message始终为Blob element empty "arjun/xyz/"
  3.   

    因此,无法判断文件夹是否存在或是否为空。

         

    即。包含前缀"arjun/images/@app.route('/') def home(): docs = [] for doc in db.person.find(): doc.pop('_id') docs.append(doc) return jsonify(docs) 的blob列表请求   两者都会成功但会有反应体空,因为两者都没有   包含任何内容。但是,实际上第一个文件夹xyz不存在   和第二个文件夹存在但空着。

2 个答案:

答案 0 :(得分:2)

  

Blob服务基于平面存储方案,而不是分层结构   方案

来源:Blob Names

这清楚地表明Azure Storage Blob实际上没有文件夹层次结构,而“文件夹”只是用于创建虚拟层次结构的虚拟目录。

此外,如果您尝试使用Microsoft Storage Explorer创建虚拟目录,它还会向您突出显示虚拟目录在您将blob放入其中之前不存在,这使得完全有意义,因为虚拟目录在事实只是blob名称的一部分。

总之,如果您“创建”虚拟目录而不将任何blob上传到其中,则该虚拟目录不存在。

enter image description here

答案 1 :(得分:2)

正如David Makogon和juvchan所说,Azure存储blob没有文件夹层次结构。如果“文件夹”中没有blob,则表示“文件夹”不存在的含义相同。如果“文件夹”中有blob,那么我们可以从List blobs API响应主体获取列表blob计数。因此,我们无需担心文件夹是否存在或是空的,它们都意味着它不存在。