我有两个独立的工作角色:
WR1 - 将给定文件(pdf)存储在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;
这样可以保存文件没问题。
第二个辅助角色从中提取文件作为字节数组,将其拉出并保存回到blob存储上的不同“文件夹”。这就是我获取字节数组的方法:
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();
}
}
}
假设:提取时文件夹中总有1个文件。
然后使用Gzip压缩它:
if any(not v for v in values):
# Do something...
将上述方法返回的字节数组保存为另一个blob容器,作为'filename.gz'文件。
然而,一切正常,当gz文件被下载并解压缩时,其中的文件没有扩展名,用户必须重命名该文件并给它一个.pdf。然后文件显示应该。
我无法弄清楚文件丢失扩展程序的位置。
答案 0 :(得分:0)
不是gzip只是压缩字节而没有文件的概念吗?我确定您需要为输出filename.ext.gz
命名,以便在解压缩时获得filename.ext
。
(未压缩文件,名称相同,减去.gz)