解压缩存储在Azure上的文件会导致文件没有扩展名

时间:2016-05-06 17:58:11

标签: gzip azure-worker-roles azure-blob-storage

我有两个独立的工作角色:

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。然后文件显示应该。

我无法弄清楚文件丢失扩展程序的位置。

1 个答案:

答案 0 :(得分:0)

不是gzip只是压缩字节而没有文件的概念吗?我确定您需要为输出filename.ext.gz命名,以便在解压缩时获得filename.ext

(未压缩文件,名称相同,减去.gz)