IActionResult 接口来实现一个接口返回多个文件流,不压缩返回
时间: 2024-05-12 14:14:25 浏览: 196
C#上传文件返回文件名称
可以使用 ASP.NET Core 中的 FileContentResult 类来实现这个需求。FileContentResult 类继承自 FileResult 类,可以返回多个文件流。
以下是一个简单的示例:
```csharp
public IActionResult DownloadMultipleFiles()
{
// 获取多个文件流
List<byte[]> fileContents = GetMultipleFileContents();
// 定义文件名和 MIME 类型
List<string> fileNames = new List<string> { "file1.txt", "file2.txt", "file3.txt" };
List<string> mimeTypes = new List<string> { "text/plain", "text/plain", "text/plain" };
// 创建多个 FileContentResult 对象
List<FileContentResult> fileResults = new List<FileContentResult>();
for (int i = 0; i < fileContents.Count; i++)
{
fileResults.Add(new FileContentResult(fileContents[i], mimeTypes[i])
{
FileDownloadName = fileNames[i]
});
}
// 返回多个文件流
return new MultipleFileContentResult(fileResults);
}
```
其中,MultipleFileContentResult 是一个自定义的 ActionResult 类,用于将多个 FileContentResult 对象合并成一个 ActionResult。以下是 MultipleFileContentResult 类的代码:
```csharp
public class MultipleFileContentResult : ActionResult
{
private readonly List<FileContentResult> _fileResults;
public MultipleFileContentResult(List<FileContentResult> fileResults)
{
_fileResults = fileResults ?? throw new ArgumentNullException(nameof(fileResults));
}
public override async Task ExecuteResultAsync(ActionContext context)
{
var response = context.HttpContext.Response;
// 设置响应头
response.Headers.Add("Content-Disposition", "attachment; filename=files.zip");
response.ContentType = "application/zip";
// 写入多个文件流
using (var archive = new ZipArchive(response.Body, ZipArchiveMode.Create, true))
{
foreach (var fileResult in _fileResults)
{
// 将每个 FileContentResult 的内容压缩到一个 ZIP 文件中
var entry = archive.CreateEntry(fileResult.FileDownloadName, CompressionLevel.Optimal);
using (var entryStream = entry.Open())
{
await entryStream.WriteAsync(fileResult.FileContents);
}
}
}
}
}
```
MultipleFileContentResult 类将多个 FileContentResult 对象的内容压缩成一个 ZIP 文件,并作为整个 ActionResult 返回给客户端。
需要注意的是,上述示例中的 GetMultipleFileContents() 方法需要根据实际需求进行实现,用于获取多个文件的内容。
阅读全文