如何使用ICSharpCode.SharpZipLib.Zip压缩blobs



我正在使用最新的azure sdk azure . storage . blobs版本12.9.1用于c#。我要把所有的斑点从一个容器移到另一个容器。我已经列出了所有blob,但我被困在如何打开输出流,在另一个容器中编写blob。

FileStream fs = File.OpenWrite("\" + str+"zip");

using (var zipOutputStream = new ZipOutputStream(fs))
{
foreach (var blobFileName in files)
{
zipOutputStream.SetLevel(5);
var blob = dirFromZip.GetBlobClient(blobFileName);
var entry = new ZipEntry(blobFileName);
zipOutputStream.PutNextEntry(entry);
blob.DownloadTo(zipOutputStream);
}
fs.Position = 0;
var blobClient = dirwhereZip.GetBlobClient(str);
blobClient.Upload(fs);
zipOutputStream.Finish();
zipOutputStream.Close();
}

错误:System。NotSupportedException: Stream does not support reading.

请尝试下面的代码:

using System;
using System.Threading.Tasks;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using System.IO;
using ICSharpCode.SharpZipLib.Zip;
namespace SO68566758
{
class Program
{
private const string connectionString = "DefaultEndpointsProtocol=https;AccountName=account-name;AccountKey=account-key";
private const string sourceContainer = "source-container";
private const string targetContainer = "target-container";
private const string outputBlobName = "backup.zip";
static async Task Main(string[] args)
{
BlobServiceClient serviceClient = new BlobServiceClient(connectionString);
BlobContainerClient sourceContainerClient = serviceClient.GetBlobContainerClient(sourceContainer);
BlobContainerClient targetContainerClient = serviceClient.GetBlobContainerClient(targetContainer);
var blobs = sourceContainerClient.GetBlobsAsync();
using (var fs = new FileStream(outputBlobName, FileMode.OpenOrCreate))
{
using (var zipOutputStream = new ZipOutputStream(fs))
{
await foreach (var blob in blobs)
{
var blobName = blob.Name;
var blobClient = sourceContainerClient.GetBlobClient(blobName);
//var downloadResponse = await blobClient.DownloadAsync();
//var streamContent = downloadResponse.Value.Content;
var entry = new ZipEntry(blobName);
zipOutputStream.PutNextEntry(entry);
await blobClient.DownloadToAsync(zipOutputStream);
}
}
}
BlobClient targetBlob = targetContainerClient.GetBlobClient(outputBlobName);
using (FileStream fs = new FileStream(outputBlobName, FileMode.Open))
{
await targetBlob.UploadAsync(fs);
}
}
}
}

最新更新