如何在 Azure Blob 存储中解压缩自解压 Zip 文件?
How to unzip Self Extracting Zip files in Azure Blob Storage?
我有一个可以使用 7zip 解压缩的 zip 文件(.Exe - 自解压 zip 文件)。因为我想自动执行提取过程,所以我使用了下面的 C# 代码。它适用于普通的 7z 文件。但是面对这个问题 'Cannot access the closed Stream',当我尝试提取特定的自解压 (.Exe) zip 文件时。供参考。我手动确保 7zip 命令行版本正在解压缩文件。
using (SevenZipExtractor extract = new SevenZipExtractor(zipFileMemoryStream))
{
foreach (ArchiveFileInfo archiveFileInfo in extract.ArchiveFileData)
{
if (!archiveFileInfo.IsDirectory)
{
using (var memory = new MemoryStream())
{
string shortFileName = Path.GetFileName(archiveFileInfo.FileName);
extract.ExtractFile(archiveFileInfo.Index, memory);
byte[] content = memory.ToArray();
file = new MemoryStream(content);
}
}
}
}
zip 文件位于 Azure blob 存储中。我不知道如何在 blob 存储中获取提取的文件。
这是对我有用的解决方法之一。我使用 ZipArchive 而不是 7Zip。
ZipArchive archive = new ZipArchive(myBlob);
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(destinationStorage);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference(destinationContainer);
foreach(ZipArchiveEntry entry in archive.Entries) {
log.LogInformation($"Now processing {entry.FullName}");
string valideName = Regex.Replace(entry.Name, @ "[^a-zA-Z0-9\-]", "-").ToLower();
CloudBlockBlob blockBlob = container.GetBlockBlobReference(valideName);
using(var fileStream = entry.Open()) {
await blockBlob.UploadFromStreamAsync(fileStream);
}
}
参考:
How to Unzip Automatically your Files with Azure Function v2
我有一个可以使用 7zip 解压缩的 zip 文件(.Exe - 自解压 zip 文件)。因为我想自动执行提取过程,所以我使用了下面的 C# 代码。它适用于普通的 7z 文件。但是面对这个问题 'Cannot access the closed Stream',当我尝试提取特定的自解压 (.Exe) zip 文件时。供参考。我手动确保 7zip 命令行版本正在解压缩文件。
using (SevenZipExtractor extract = new SevenZipExtractor(zipFileMemoryStream))
{
foreach (ArchiveFileInfo archiveFileInfo in extract.ArchiveFileData)
{
if (!archiveFileInfo.IsDirectory)
{
using (var memory = new MemoryStream())
{
string shortFileName = Path.GetFileName(archiveFileInfo.FileName);
extract.ExtractFile(archiveFileInfo.Index, memory);
byte[] content = memory.ToArray();
file = new MemoryStream(content);
}
}
}
}
zip 文件位于 Azure blob 存储中。我不知道如何在 blob 存储中获取提取的文件。
这是对我有用的解决方法之一。我使用 ZipArchive 而不是 7Zip。
ZipArchive archive = new ZipArchive(myBlob);
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(destinationStorage);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference(destinationContainer);
foreach(ZipArchiveEntry entry in archive.Entries) {
log.LogInformation($"Now processing {entry.FullName}");
string valideName = Regex.Replace(entry.Name, @ "[^a-zA-Z0-9\-]", "-").ToLower();
CloudBlockBlob blockBlob = container.GetBlockBlobReference(valideName);
using(var fileStream = entry.Open()) {
await blockBlob.UploadFromStreamAsync(fileStream);
}
}
参考: How to Unzip Automatically your Files with Azure Function v2