C# IFormFile 作为 ZipFile
C# IFormFile as ZipFile
我有一个 REST API 端点,它在 .Net Core 1.1 上接收 zip 文件。我正在从这样的请求中获取 IFormFile
var zipFile = HttpContext.Request.Form.Files.FirstOrDefault();
然后我需要将它传递给不支持 IFormFile 的 .Net Standard 1.5 中的服务方法。
所以问题是:如何将 IFormFile 转换为 ZipFile 或标准 1.5 支持的其他类型,或者可能有一些更合适的方式来处理 zip 文件?
谢谢!
IFormFile
只是接收文件的包装器。您仍然应该 阅读 实际文件对其进行处理。例如,您可以将文件流读入字节数组并将其传递给服务:
byte[] fileData;
using (var stream = new MemoryStream((int)file.Length))
{
file.CopyTo(stream);
fileData = stream.ToArray();
}
或者您可以将流复制到文件系统中的物理文件中。
但这基本上取决于你实际想对上传的文件做什么,所以你应该从那个方向开始并将 IFormFile
转换成你需要的东西。
如果您想以 ZIP 格式打开文件并从中提取内容,您可以尝试使用流式传输的 ZipArchive
constructor。像这样:
using (var stream = file.OpenReadStream())
using (var archive = new ZipArchive(stream))
{
var innerFile = archive.GetEntry("foo.txt");
// do something with the inner file
}
我有一个 REST API 端点,它在 .Net Core 1.1 上接收 zip 文件。我正在从这样的请求中获取 IFormFile
var zipFile = HttpContext.Request.Form.Files.FirstOrDefault();
然后我需要将它传递给不支持 IFormFile 的 .Net Standard 1.5 中的服务方法。
所以问题是:如何将 IFormFile 转换为 ZipFile 或标准 1.5 支持的其他类型,或者可能有一些更合适的方式来处理 zip 文件? 谢谢!
IFormFile
只是接收文件的包装器。您仍然应该 阅读 实际文件对其进行处理。例如,您可以将文件流读入字节数组并将其传递给服务:
byte[] fileData;
using (var stream = new MemoryStream((int)file.Length))
{
file.CopyTo(stream);
fileData = stream.ToArray();
}
或者您可以将流复制到文件系统中的物理文件中。
但这基本上取决于你实际想对上传的文件做什么,所以你应该从那个方向开始并将 IFormFile
转换成你需要的东西。
如果您想以 ZIP 格式打开文件并从中提取内容,您可以尝试使用流式传输的 ZipArchive
constructor。像这样:
using (var stream = file.OpenReadStream())
using (var archive = new ZipArchive(stream))
{
var innerFile = archive.GetEntry("foo.txt");
// do something with the inner file
}