.net 不使用azcopy跨Azure容器复制文件
我想在不使用azcopy实用程序的情况下跨Azure容器复制文件。 请帮助编写脚本(Spring boot或.net示例) 我能够将文件从\上传\下载到本地从\上传到容器。 现在想知道,我如何实现远程到远程复制.net 不使用azcopy跨Azure容器复制文件,.net,azure,spring-boot,.net,Azure,Spring Boot,我想在不使用azcopy实用程序的情况下跨Azure容器复制文件。 请帮助编写脚本(Spring boot或.net示例) 我能够将文件从\上传\下载到本地从\上传到容器。 现在想知道,我如何实现远程到远程复制 using Azure.Storage.Blobs; using Azure.Storage.Blobs.Models; using Microsoft.Azure.Storage.Blob; using System; using System.IO; using System.Thr
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Microsoft.Azure.Storage.Blob;
using System;
using System.IO;
using System.Threading.Tasks;
namespace whizlabblob
{
class Program
{
static string storageconnstring = "DefaultEndpointsProtocol=https;AccountName=mainices;AccountKey=********************";
static string containerName = "demo";
static string filename = "sample.txt";
static string filepath="C:\\Work\\sample.txt";
static string downloadpath = "C:\\Work\\sample2.txt";
static async Task Main(string[] args)
{
//Container().Wait();
//CreateBlob().Wait();
//GetBlobs().Wait();
// GetBlob().Wait();
Console.WriteLine("Complete");
Console.ReadKey();
}
static async Task Container()
{
BlobServiceClient blobServiceClient = new BlobServiceClient(storageconnstring);
BlobContainerClient containerClient = await blobServiceClient.CreateBlobContainerAsync(containerName);
}
static async Task CreateBlob()
{
BlobServiceClient blobServiceClient = new BlobServiceClient(storageconnstring);
BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);
BlobClient blobClient = containerClient.GetBlobClient(filename);
using FileStream uploadFileStream = File.OpenRead(filepath);
await blobClient.UploadAsync(uploadFileStream, true);
uploadFileStream.Close();
}
static async Task GetBlobs()
{
BlobServiceClient blobServiceClient = new BlobServiceClient(storageconnstring);
BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);
await foreach (BlobItem blobItem in containerClient.GetBlobsAsync())
{
Console.WriteLine("\t" + blobItem.Name);
}
}
static async Task GetBlob()
{
BlobServiceClient blobServiceClient = new BlobServiceClient(storageconnstring);
BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);
BlobClient blob = containerClient.GetBlobClient(filename);
BlobDownloadInfo blobdata = await blob.DownloadAsync();
using (FileStream downloadFileStream = File.OpenWrite(downloadpath))
{
await blobdata.Content.CopyToAsync(downloadFileStream);
downloadFileStream.Close();
}
// Read the new file
using (FileStream downloadFileStream = File.OpenRead(downloadpath))
{
using var strreader = new StreamReader(downloadFileStream);
string line;
while ((line = strreader.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
}
}
}
下面的代码工作正常。我现在只需要远程拷贝
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Microsoft.Azure.Storage.Blob;
using System;
using System.IO;
using System.Threading.Tasks;
namespace whizlabblob
{
class Program
{
static string storageconnstring = "DefaultEndpointsProtocol=https;AccountName=mainices;AccountKey=********************";
static string containerName = "demo";
static string filename = "sample.txt";
static string filepath="C:\\Work\\sample.txt";
static string downloadpath = "C:\\Work\\sample2.txt";
static async Task Main(string[] args)
{
//Container().Wait();
//CreateBlob().Wait();
//GetBlobs().Wait();
// GetBlob().Wait();
Console.WriteLine("Complete");
Console.ReadKey();
}
static async Task Container()
{
BlobServiceClient blobServiceClient = new BlobServiceClient(storageconnstring);
BlobContainerClient containerClient = await blobServiceClient.CreateBlobContainerAsync(containerName);
}
static async Task CreateBlob()
{
BlobServiceClient blobServiceClient = new BlobServiceClient(storageconnstring);
BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);
BlobClient blobClient = containerClient.GetBlobClient(filename);
using FileStream uploadFileStream = File.OpenRead(filepath);
await blobClient.UploadAsync(uploadFileStream, true);
uploadFileStream.Close();
}
static async Task GetBlobs()
{
BlobServiceClient blobServiceClient = new BlobServiceClient(storageconnstring);
BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);
await foreach (BlobItem blobItem in containerClient.GetBlobsAsync())
{
Console.WriteLine("\t" + blobItem.Name);
}
}
static async Task GetBlob()
{
BlobServiceClient blobServiceClient = new BlobServiceClient(storageconnstring);
BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);
BlobClient blob = containerClient.GetBlobClient(filename);
BlobDownloadInfo blobdata = await blob.DownloadAsync();
using (FileStream downloadFileStream = File.OpenWrite(downloadpath))
{
await blobdata.Content.CopyToAsync(downloadFileStream);
downloadFileStream.Close();
}
// Read the new file
using (FileStream downloadFileStream = File.OpenRead(downloadpath))
{
using var strreader = new StreamReader(downloadFileStream);
string line;
while ((line = strreader.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
}
}
}
你就快到了:)。为了将blob从一个容器复制到另一个容器,您只需要为目标容器中的blob创建BlobClient
的实例,并调用方法并传递源blob的URI
下面是执行此操作的代码:
static async Task CopyBlob()
{
BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);
BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);
BlobClient blobClient = containerClient.GetBlobClient(filename);
var blobUri = blobClient.Uri;
BlobContainerClient targetContainerClient = blobServiceClient.GetBlobContainerClient("demo-copy");//This is the container where we want to copy the blob
BlobClient targetBlobClient = targetContainerClient.GetBlobClient(filename);
await targetBlobClient.StartCopyFromUriAsync(blobUri);
}
需要记住的几件事:
- 因为要在同一存储帐户中复制blob,所以只需要源blob的URI。但是,如果要跨存储帐户复制blob,则需要确保提供给copy方法的URI应该是可公开访问的
- 同样,由于要在同一存储帐户中复制blob,因此服务器端复制操作是同步的。如果要跨存储帐户复制blob,则该操作是异步的,可能需要一些时间才能完成。在对源blob执行任何操作(如删除)之前,必须等待复制操作完成