0

この問題は、バックグラウンド圧縮サービスを実行する 1 つの BLOB (Blob1) にファイルをアップロードすると発生します。バックグラウンド サービスは、Blob1 からファイルをストリーミングして圧縮し、別の Blob (Blob2) に zip ファイルとして保存して、ユーザーがダウンロードできるようにキャッシュします。

このプロセスは 2GB 未満のファイルでは問題なく動作しますが、ファイル サイズが 2GB を超えると Micrososft.Azure.Storage.StorageException がスローされます。

Microsoft.Azure.Storage.Blob 11.2.2 を使用

サンプルコード

    public async void DoWork(CancellationToken cancellationToken)
    {
    while (!cancellationToken.IsCancellationRequested)
    {
        await _messageSemaphore.WaitAsync(cancellationToken);
        MyModel model = await _queue.PeekMessage();
        if(model != null)
        {
            try
            {
                //Get CloudBlockBlob zip blob reference
                var zipBlockBlob = await _storageAccount.GetFileBlobReference(_configuration[ConfigKeys.ContainerName], model.Filename, model.FileRelativePath);

                using (var zipStream = zipBlockBlob.OpenWrite()) //Opens zipstream
                {
                    using (var archive = new ZipArchive(zipStream, ZipArchiveMode.Create, false)) // Create new ZipArchive
                    {
                        //Add each file to the zip archive
                        foreach (var fileUri in Files)
                        {
                            var file = new Uri(fileUri);
                            var cloudBlockBlob = blobContainer.GetBlockBlobReference(file);

                            using (var blobStream = cloudBlockBlob.OpenRead())//Opens read stream
                            {
                                //Create new ZipEntry
                                var zipEntry = archive.CreateEntry(model.Filename, CompressionLevel.Fastest);

                                using (var zipEntryStream = zipEntry.Open())
                                {
                                    //Zip file
                                    blobStream.CopyTo(zipEntryStream);
                                }
                            }
                        }
                    }
                }
            }
            catch (FileNotFoundException e)
            {
                Console.WriteLine($"Download Error: {e.Message}");
            }
            catch (Microsoft.Azure.Storage.StorageException e) // "
            {
                Console.WriteLine($"Storage Exception Error: {e.Message}");
            }
        }
        else
        {
            _messageSemaphore.Release();
            // Wait for 1 minute between polls when idle
            await Task.Delay(_sleepTime);
        }
        
    }
}
4

1 に答える 1