如何将文件夹上载到Azure存储

时间:2017-04-25 09:21:23

标签: c# azure azure-storage-blobs

我想将整个文件夹上传到azure存储空间。 我知道我可以使用以下方式上传文件:

blobReference.UploadFromFile(fileName);

但找不到上传整个文件夹的方法(递归)。 有这样的方法吗?或者可能是一个示例代码?

由于

4 个答案:

答案 0 :(得分:9)

文件夹结构可以只是文件名的一部分:

string myfolder = "datadir";
string myfilename = "mydatafile";
string fileName = String.Format("{0}/{1}.csv", myfolder, myfilename);
CloudBlockBlob blob = container.GetBlockBlobReference(fileName);

如果你像这个例子一样上传,文件将出现在'datadir'文件夹的容器中。

这意味着您可以使用它来复制目录结构以进行上传:

foreach (string file in Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories)) {
    // file would look like "C:\dir1\dir2\blah.txt"

    // Don't know if this is the prettiest way, but it will work:
    string cloudfilename = file.Substring(3).Replace('\\', '/');

    // get the blob reference and push the file contents to it:
    CloudBlockBlob blob = container.GetBlockBlobReference(cloudfileName);
    blob.UploadFromFile(file);
  }

答案 1 :(得分:1)

命令行没有在一次调用中批量上传多个文件的选项。但是,您可以使用find或循环上传多个文件,例如:

#!/bin/bash

export AZURE_STORAGE_ACCOUNT='your_account'
export AZURE_STORAGE_ACCESS_KEY='your_access_key'

export container_name='name_of_the_container_to_create'
export source_folder=~/path_to_local_file_to_upload/*


echo "Creating the container..."
azure storage container create $container_name

for f in $source_folder
do
  echo "Uploading $f file..."
  azure storage blob upload $f $container_name $(basename $f)
  cat $f
done

echo "Listing the blobs..."
azure storage blob list $container_name

echo "Done"

答案 2 :(得分:1)

您可以尝试使用支持传输blob目录的Microsoft Azure Storage DataMovement Library,具有高性能,可扩展性和可靠性。此外,它支持在传输过程中取消然后恢复。 Here是将文件夹上传到Azure Blob存储的示例。

答案 3 :(得分:0)