2017-09-14 12 views
0

.Net Core 1.1でzipファイルを受け取るREST APIエンドポイントがあります。私はこのC#IFormFile as ZipFile

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

のような要求からIFormFileを取得しています。そして、私はIFormFileがサポートされていません。ネット規格1.5、からサービスメソッドに渡す必要があります。

IFormFileをZipFileまたはStandard 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

関連する問題