C#IFormFile为ZipFile
我有一个REST API端点,它接收.Net Core 1.1上的zip文件。我是从要求越来越IFormFile这样C#IFormFile为ZipFile
var zipFile = HttpContext.Request.Form.Files.FirstOrDefault();
然后我需要它的.Net标准1.5,其中不支持IFormFile传递给服务方法。
所以问题是:我如何将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
}
是的,一个好办法。在服务中,我需要通过名称从zip中获取特定的txt文件,然后从中解析数据 –
@RomanBorovets在这种情况下,您可以直接以ZipArchive的形式打开文件流并尝试从中检索文件。 – poke
服务方法是否在与上述代码相同的进程中运行? – mjwills
@mjwills是的。如果您正在考虑FileStream - 可以,但如果我在短时间内会收到很多请求,该怎么办? –