C#IFormFile为ZipFile

时间:2017-09-14 13:07:19

标签: c# zipfile .net-standard asp.net-core-1.1 iformfile

我有一个REST API端点,它接收.Net Core 1.1上的zip文件。我从这样的请求中得到了IFormFile

var zipFile = HttpContext.Request.Form.Files.FirstOrDefault();

然后我需要将它传递给.Net Standard 1.5的服务方法,其中不支持IFormFile。

所以问题是:如何将IFormFile转换为ZipFile或标准1.5中支持的其他类型,或者可能有更合适的方式来操作zip文件? 谢谢!

1 个答案:

答案 0 :(得分:4)

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
}