2017-09-14 61 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