2017-09-14 3 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을 필요한 것으로 변환해야합니다.


당신이 우편으로 파일을 열고 그것에서 무언가를 추출 할 경우 스트림을 취하는 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