2016-08-29 4 views
1

HttpPostedFileBase의 스트림을 디스크에 저장하지 않고 서비스 메서드에 전달하려고합니다.HTTPPostedFileBase의 MVC/WebApi 스트림

//Controller Action 
[HttpPost] 
    public void Import() 
    { 
     if (Request.Files.Count == 0) 
      return new HttpStatusCodeResult(404); 

     var file = Request.Files[0]; 

     _departmentAppService.Import(file.InputStream); 
    } 

//Service Method 
public string Import(Stream stream) 
    { 
     var excelFile = ExcelFile.Load(stream, LoadOptions.CsvDefault); 
     var worksheet = excelFile.Worksheets[0]; 
     var jsonString = worksheet.ToJsonString(); 
     return jsonString; 
    } 

의 오류 " 'System.Web.HttpInputStream'객체 속성 접근 'ReadTimeout'는 다음과 같은 예외를 던졌다 : '제한 시간이 스트림에서 지원되지 않습니다."스트림이 전달 될 때가 발생 방법에. 이것을하는 관용적 인 방법이 있습니까?

답변

0

당신이 얻은 스택 추적을 검사 할 수 없으므로이 문제를 재현 할 수 없었지만, 큰 CSV 파일을 처리하고 있기 때문에 시간이 초과되었다고 생각하지만, 'executionTimeout '을 사용하십시오.

또한 당신은 다음과 같은 것을 업로드 된 파일을 저장하는 임시 메모리 스트림을 사용하여 시도 할 수 :

var file = Request.Files[0]; 
using (var tempStream = new MemoryStream()) 
{ 
    file.InputStream.CopyTo(tempStream); 
    tempStream.Position = 0; 
    _departmentAppService.Import(tempStream); 
} 

을 도움이 되었기를 바랍니다.

+0

답장을 보내 주셔서 감사합니다. 여전히 동일한 오류가 발생합니다. 'System.IO.MemoryStream'개체의 속성 접근 자 'ReadTimeout'에서 '이 스트림에서 시간 제한이 지원되지 않습니다.'라는 예외가 발생했습니다. 스택 추적 : System.IO.Stream.get_ReadTimeout에서 () 파일은 1킬로바이트이다 당신이 어떤 다른 제안이 있습니까? – bjscharf

+0

불행히도 아니지만 문제를 재현하여 조사 할 수있는 VS 테스트 프로젝트를 임시로 업로드 할 수 있습니까? –

+1

도와 주셔서 감사합니다. 많은 시간 동안 테스트를 거친 후에 이것은 우리가 사용하고있는 Asp.Net 보일러 플레이트 프레임 워크와 관련이있는 것처럼 보입니다. 최신 버전 (https://github.com/aspnetboilerplate/aspnetboilerplate/releases/tag/v0.11.2.0)으로 업데이트하고 많은 코드를 변경하면이 오류가 사라집니다. 나는 너의 도움에 대단히 감사한다. – bjscharf