2014-12-16 2 views
0

간단하게 보이지만, 업로드 된 애스 팩트에 초점을 맞춘 ServiceStack에서 테스트를 보지 못했습니다. 모든 것이 브라우저로 파일을 스트리밍하는 데 초점을 맞추고있는 것 같습니다. 나는 이것을 사용할 다양한 클라이언트에 대해 걱정할 필요가 없다. 통제 된 환경에 있기 때문에,이 technique이 재미있어 보인다. ServiceStack에서 큰 csv 파일을 업로드 한 다음 서비스에서 파일을 사용하는 즉 데이터를 데이터베이스로 가져 오는 것에 대한 자세한 정보는 어디에서 찾을 수 있습니까?csv 파일을 ServiceStack에 업로드하고 파싱하는 가장 빠른 방법은 무엇입니까?

충분히 테스트 한 후에 업로드 테스트가 표시되지만 디스크에 파일을 저장하는 데 초점을 맞춘 것 같습니다. 사용 가능한 유일한 옵션 인 경우 메모리로 스트리밍하고 파일을 구문 분석 할 수 있기를 바랍니다. .

는 스티븐

답변

3

한 가지 방법은 .zip 파일에 압축 된 다수의 개별 파일뿐 아니라 여러 개의 파일을 업로드 지원하는 입력 POCO,에 아파치 벤치 마크를 직렬화 복원 processing uploaded files에 대한 HttpBenchmarks 예제 프로젝트에 감사 :

public object Post(UploadTestResults request) 
{ 
    foreach (var httpFile in base.Request.Files) 
    { 
     if (httpFile.FileName.ToLower().EndsWith(".zip")) 
     { 
      // Expands .zip files 
      using (var zip = ZipFile.Read(httpFile.InputStream)) 
      { 
       var zipResults = new List<TestResult>(); 
       foreach (var zipEntry in zip) 
       { 
        using (var ms = new MemoryStream()) 
        { 
         zipEntry.Extract(ms); 
         var bytes = ms.ToArray(); 
         zipResults.Add(new MemoryStream(bytes).ToTestResult()); 
        } 
       } 
       newResults.AddRange(zipResults); 
      } 
     } 
     else 
     { 
      // Converts 
      var result = httpFile.InputStream.ToTestResult(); 
      newResults.Add(result); 
     } 
    } 
    ... 
} 

이 예제에서는 ToTestResult() extension method을 변경하여 CSV 스트림을 형식화 된 POCO로 역 직렬화합니다.

ServiceStack 자체에는 내장 CSV 디시리얼라이저가 없으므로 .NET CSV 디시리얼라이저 라이브러리를 찾거나 수동으로 업로드 된 CSV 파일을 구문 분석해야합니다.

관련 문제