C#Azure存储从一个blob复制文件到另一个blob

时间:2015-10-05 19:07:07

标签: azure download upload azure-storage azure-storage-blobs

如何从一个blob读取文件并上传到另一个blob?我的要求是将文件从一个blob复制到另一个具有不同文件名的blob?在C#

3 个答案:

答案 0 :(得分:9)

实现它的最简单方法是使用"Azure Storage Data Movement Library"(你可以通过nuget包获得它)。

这是一个简单的样本来进行转移:

using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using Microsoft.WindowsAzure.Storage.DataMovement;
using System;

namespace BlobClient
{
    class Program
    {
        static void Main(string[] args)
        {
            const string storageConnectionString = "DefaultEndpointsProtocol=https;AccountName=juanktest;AccountKey=loHQwke4lSEu1p2W3gg==";
            const string container1 = "juankcontainer";
            const string sourceBlobName = "test.txt";
            const string destBlobName = "newTest.txt";


            //Setup Account, blobclient and blobs
            CloudStorageAccount account = CloudStorageAccount.Parse(storageConnectionString);
            CloudBlobClient blobClient = account.CreateCloudBlobClient();

            CloudBlobContainer blobContainer = blobClient.GetContainerReference(container1);
            blobContainer.CreateIfNotExists();

            CloudBlockBlob sourceBlob = blobContainer.GetBlockBlobReference(sourceBlobName);

            CloudBlockBlob destinationBlob = blobContainer.GetBlockBlobReference(destBlobName);

            //Setup data transfer
            TransferContext context = new TransferContext();
            Progress<TransferProgress> progress = new Progress<TransferProgress>(
                (transferProgress) => {
                        Console.WriteLine("Bytes uploaded: {0}", transferProgress.BytesTransferred);
                });

            context.ProgressHandler = progress;

            // Start the transfer
            try
            {
                TransferManager.CopyAsync(sourceBlob, destinationBlob, 
                    false /* isServiceCopy */, 
                    null /* options */, context);
            }
            catch (Exception e)
            {
                Console.WriteLine("The transfer is cancelled: {0}", e.Message);
            }

            Console.WriteLine("CloudBlob {0} is copied to {1} ====successfully====", 
                            sourceBlob.Uri.ToString(), 
                            destinationBlob.Uri.ToString());

            Console.ReadLine();
        }
    }
}

请注意,“ Azure存储数据移动库”非常强大,因此您可以跟踪传输进度,取消操作,甚至暂停它以便以后恢复;)

答案 1 :(得分:0)

复制文件的最简单方法之一是使用AzCopy实用程序。

答案 2 :(得分:0)

  • 我想推荐除上述方法之外的另一种方法来完成这项工作。

  • 那是 azure 函数。(无服务器计算服务)。

  • 作为先决条件,您应该具备一些有关 azure 函数、创建和部署它们的知识。 1. What is azure function 2. create an Azure function app

  • 以下代码片段是执行此操作的最简单和基本的方法。 (在这里,当用户将新文件上传到“演示”blob 时,该函数将被触发并从演示 blob 中读取上传的文件并复制到“输出”blob。)

     namespace Company.Function{
     public static class NamalFirstBlobTrigger
     {
         [FunctionName("NamalFirstBlobTrigger")]
         public static void Run([BlobTrigger("demo/{name}", Connection = "AzureWebJobsStorage")]Stream myBlob, 
         [Blob("output/testing.cs",FileAccess.Write, Connection = "AzureWebJobsStorage")]Stream outputBlob,
         string name, 
         ILogger log)
         {
             myBlob.CopyTo(outputBlob);
         }
     }}