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



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

WR1-将给定的文件(pdf)存储在blob存储上的特定容器中,代码如下:

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;

假设:提取时,文件夹中总是有一个文件。

然后使用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"文件保存到另一个blob容器。

然而,当gz文件被下载并解压缩时,它里面的文件没有扩展名,用户必须重命名文件并给它一个.pdf。然后文件就会显示出来。

我无法弄清楚在这个过程中,文件的扩展名是在哪里丢失的。

gzip不就是一个没有文件概念的字节压缩吗?我确信您需要将输出命名为filename.ext.gz,这样当您解压缩它时,就会得到filename.ext

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

最新更新