需要将Azure blob文件从一个文件夹复制到另一个文件夹并创建zip

时间:2015-10-09 12:47:10

标签: javascript c# azure

我正在开展一个项目。我将文件放在blob中,我需要将这些Azure blob文件从一个文件夹复制到另一个文件夹。我还需要创建一个zip文件。

请有人帮助我;我是新手,不知道该怎么做。

2 个答案:

答案 0 :(得分:1)

首先,您应该告诉我们您正在使用的语言。没有说明,我将假设C#。

我将首先按照此处的Blob教程进行操作: https://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-blobs/

然后我会为一个zip库安装一个nugget包。这里有一些很好的文档/样本: http://icsharpcode.github.io/SharpZipLib/ https://github.com/haf/DotNetZip.Semverd

我个人首选的图书馆是DotNetZip,因为它易于使用,并且页面上有很好的文档。

您的高级代码将是:

迭代每个容器

收集所有Blob。 将所有Blob复制到新位置。 使用Zip库来填充内容。

下面是一些示例代码,可帮助您滚动,如果您有太多blob,这可能会因内存不足异常而失败,但这应该适用于您的方案。如果出现内存不足的情况,只需一次执行一次blob而不是一次执行。

    string key = "";
    string accountName = "mystorageaccount";
    string connectionString = "DefaultEndpointsProtocol=https;AccountName="
                            + accountName + ";AccountKey=" + key;
    var account = CloudStorageAccount.Parse(connectionString);
    var blobClient = account.CreateCloudBlobClient();
    //below line not necessary, just for demo how to get a container.
    var blobContainer = blobClient.GetContainerReference("mycontainer");

    List<ICloudBlob> allblobs = new List<ICloudBlob>;
    foreach(CloudBlobContainer container in blobClient.ListContainers())
    {
        allblobs.AddRange((from ICloudBlob blob in
                        container.ListBlobs(useFlatBlobListing: true)
                        select blob));
    }

答案 1 :(得分:0)

有关MSDN的好文章涵盖了Azure blob容器。 https://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-blobs/

// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("StorageConnectionString"));

// Create the blob client.
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

// Retrieve reference to a previously created container.
CloudBlobContainer container = blobClient.GetContainerReference("mycontainer");

// Retrieve reference to a blob named "photo1.jpg".
CloudBlockBlob blockBlob = container.GetBlockBlobReference("photo1.jpg");

// Save blob contents to a file.
using (var fileStream = System.IO.File.OpenWrite(@"path\myfile"))
{
    blockBlob.DownloadToStream(fileStream);
}

您可以使用ListBlobs方法获取所有blob,然后遍历它们以下载

CloudBlobDirectory dir = container.GetDirectoryReference("yourFolder");
var blobs = dir.ListBlobs(new BlobRequestOptions() { UseFlatBlobListing = true });

有很多第三方库可以使用zip存档,例如https://github.com/haf/DotNetZip.Semverd