7

BLOBストレージアカウント内の1つのコンテナーにファイルを保存しています。最初のコンテナのファイルを含むzipファイルを2番目のコンテナに作成する必要があります。

ワーカーロールとDotNetZipを使用して機能するソリューションがありますが、zipファイルのサイズが1 GBになる可能性があるため、オブジェクトなどを使用してすべての作業を進行中MemoryStreamに行うことが最善の方法ではないことが懸念されます。私の最大の懸念は、このプロセスが1日に数回発生する可能性があることを考えると、メモリ使用量とリソースの解放です。

以下は、ワーカーロールの基本的なプロセスを示す非常に簡略化されたコードです。

using (ZipFile zipFile = new ZipFile())
{
    foreach (var uri in uriCollection)
    {
        var blob = new CloudBlob(uri);

        byte[] fileBytes = blob.DownloadByteArray();

        using (var fileStream = new MemoryStream(fileBytes))
        {
            fileStream.Seek(0, SeekOrigin.Begin);

            byte[] bytes = CryptoHelp.EncryptAsBytes(fileStream, "password", null);

            zipFile.AddEntry("entry name", bytes);
        }
    }

    using (var zipStream = new MemoryStream())
    {
        zipFile.Save(zipStream);
        zipStream.Seek(0, SeekOrigin.Begin);

        var blobRef = ContainerDirectory.GetBlobReference("output uri");
        blobRef.UploadFromStream(zipStream);
    }

}

誰かがより良いアプローチを提案できますか?

4

2 に答える 2

3

この質問を書いている時点では、Azureで利用できるLocalStorageオプションを知りませんでした。これにファイルを個別に書き込み、LocalStorage内でそれらを操作してから、blobストレージに書き戻すことができました。

于 2012-01-28T12:11:59.477 に答える
1

あなたが心配しているのがあなたのmemorysteamがあまりにも多くのメモリを消費していることであるなら、あなたができることはあなた自身のストリームを実装することですそしてあなたのストリームが読まれているときにあなたはあなたのzipファイルをストリームに追加しそしてあなたはすでに読んだファイルをストリームから削除します。これにより、メモリストリームのサイズが1つのファイルのサイズに保たれます。

于 2011-12-27T04:53:47.117 に答える