2017-09-14 39 views
0

我有一个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文件? 谢谢!

+0

服务方法是否在与上述代码相同的进程中运行? – mjwills

+0

@mjwills是的。如果您正在考虑FileStream - 可以,但如果我在短时间内会收到很多请求,该怎么办? –

回答

3

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 
} 
+0

是的,一个好办法。在服务中,我需要通过名称从zip中获取特定的txt文件,然后从中解析数据 –

+0

@RomanBorovets在这种情况下,您可以直接以ZipArchive的形式打开文件流并尝试从中检索文件。 – poke