如何从一个blob读取文件并上传到另一个blob?我的要求是将文件从一个blob复制到另一个具有不同文件名的blob?在C#
答案 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);
}
}}