【发布时间】:2021-08-11 08:52:01
【问题描述】:
我尝试从 .NET Core 3.1 中的 Web API 下载多个文件,并将它们放入响应正文中编写的 zip 存档中。 当我使用浏览器下载 zip 文件时,zip 文件已损坏!
控制器:
public async Task DownloadFilesAsync([FromServices] IFileService fileService, [FromBody] IEnumerable<Guid> fileIds, Guid folderId)
{
HttpContext.Response.Headers.Add("Content-Disposition", $"{DispositionTypeNames.Attachment};filename*=files.zip");
HttpContext.Response.ContentType = MediaTypeNames.Application.Zip;
await fileService.GetZipAsync(User.UserId(), folderId, fileIds, HttpContext.Response.Body);
}
服务:
public async Task GetZipAsync(Guid userId, Guid folderId, IEnumerable<Guid> fileIds, Stream stream)
{
using (ZipArchive zip = new ZipArchive(stream, ZipArchiveMode.Create, leaveOpen: true))
{
foreach (Guid id in fileIds)
{
// metadata stored in a sql database, File is a custom type
File file = await _fileRepository.GetFileAsync(folderId, id);
using Stream entry = zip.CreateEntry(file.Name, CompressionLevel.Optimal).Open();
await _fileStorage.WriteBlobAsync(userId, folderId, file.Name, entry);
}
}
}
存储库:
public async Task WriteBlobAsync(Guid userId, Guid folderId, string name, Stream output)
{
BlobContainerClient container = Client.GetBlobContainerClient(userId.ToString());
await container.GetBlobClient($"{folderId}/{name}").DownloadToAsync(output);
}
但下载的 zip 存档无法使用:
我做错了什么?
【问题讨论】:
标签: c# asp.net-core-webapi azure-blob-storage