0
我有2個獨立的輔助角色:解壓存儲在一個文件Azure的結果的文件沒有擴展
WR1 - 存儲在團塊存儲特定容器給定文件(PDF),下面的代碼:
var folderName = dynamicFolderNameAsInputToThisMethod;
CloudBlobContainer container;
container = GetCloudBlobContainerByName(containerName);
var blob = container.GetBlockBlobReference(string.Format("{0}/{1}", folderName, fileName));
blob.Properties.ContentType = inThisInstanceApplicationPdf;
await blob.UploadFromByteArrayAsync(storageBlob.FileAsByteArray, 0, storageBlob.FileAsByteArray.Length);
return string.Format("{0}/{1}/{2}", _blobClient.BaseUri, folderName, fileName);
這節省了文件沒問題。
第二個工作人員角色從此字節數組中提取文件,將其壓縮並保存到blob存儲中的另一個「文件夾」。這是我如何得到字節數組:
var filesInContainer = new List<byte[]>();
var blobContainer = GetCloudBlobContainerByName(fileProcessStage);
var blobDirectory = blobContainer.ListBlobs(
string.Format("{0}/{1}", folderName, subFolderName))
.FirstOrDefault(b => b is CloudBlobDirectory) as CloudBlobDirectory;
foreach (var blob in blobDirectory.ListBlobs())
{
var blockBlob = blob as CloudBlockBlob;
byte[] fileContent = new byte[blockBlob.Properties.Length];
blockBlob.DownloadToByteArray(fileContent, 0);
filesInContainer.Add(fileContent);
}
return filesInContainer;
假設:提取時文件夾中總是有1個文件。
然後將其壓縮使用gzip:
public byte[] Compress(byte[] bytesToCompress)
{
using(var originalStream = new MemoryStream(bytesToCompress))
{
using(var compressedFileStream = new MemoryStream())
{
using (var compressionStream = new GZipStream(compressedFileStream, CompressionMode.Compress))
{
originalStream.CopyTo(compressionStream);
}
return compressedFileStream.ToArray();
}
}
}
保存由該上述方法返回到另一個團塊容器作爲「filename.gz」文件中的字節數組。
但是,一切正常,當gz文件被下載並解壓縮後,其中的文件沒有擴展名,用戶必須重命名該文件併爲其提供.pdf。該文件然後顯示爲它應該。
我無法弄清楚在這個過程中丟失擴展名的文件在哪裏。