2013-10-05 3 views
3

나는 누군가가 이것에 대해 밝힐 수 있기를 바랬다. 많은 어려움을 겪었으므로 IE8 및 IE9와 같은 브라우저는 파일 판독기를 지원하지 않습니다.파일을 읽을 수있는 형식으로 다시 보냅니 까?

그래서 약간의 연구가 끝나면 서버에서 파일의 내용을 읽고 base64로 변환 한 다음 자바 스크립트에서 다시 가져온 클라이언트로 보내려고합니다.

이것이 가능합니까? 이 일을 어떻게 권장 하시겠습니까?

지금 내가 양식이 제출되면 파일을 가져옵니다 RESTful 서비스를 설정 한 예를 들어

...

public string Post() 
    { 
     string readableFile=""; 
     HttpResponseMessage result = null; 
     var httprequest = HttpContext.Current.Request; 
     if (httprequest.Files.Count > 0) 
     { 
      foreach (string file in httprequest.Files) 
      { 
       var postedFile = httprequest.Files[file]; 
       //convert to base64? somehow? 
      } 
     } 
     return readableFile; 

    } 

postedFile 변수가 파일 정보를 포함, 난 그냥에 그것을 만들 필요가 읽을 수있는 형식 ... 비록 어려움을 겪고 있습니다.

모든 의견이나 도움을 주시면 대단히 감사하겠습니다!

+0

''어떤 유형의 파일 판독기도 지원하지 않습니다. ''우리는 어떤 유형의 파일을 말하고 있습니까? 브라우저가 태양 아래 모든 유형의 파일을 지원할 것으로 기대할 수는 없습니까? –

+0

@JonathonReinhart : 일부 파일을 구문 분석하는 일반적인 개념이 아니라 HTML5 FileReader() 인터페이스를 참조합니다. afaik, FileReader는 컴퓨터의 RAM보다 큰 파일 하나라도 열 수 있습니다. – dandavis

답변

1

HttpPostedFile 클래스에는 데이터를 읽을 때 사용할 수있는 InputStream 속성이 있습니다. 합리적인 제한을 설정할

public string Post(HttpPostedFile file) 
{ 
    if (file.InputStream.Length > Int32.MaxValue) // Or some other file length limitation 
     throw new HttpResponseException(HttpStatusCode.BadRequest); 

    int length = (int)file.InputStream.Length; 

    byte[] buffer = new byte[length]; 

    file.InputStream.Read(buffer, 0, length); 

    string encodedString = Convert.ToBase64String(buffer); 

    return encodedString; 
} 

당신은 상당히 다르게 4GB의 이상 큰 파일을 지원하려는 경우 코딩해야하지만, 난 당신을 믿고있어 : 다음 작업을 수행 할 수있는 base64로 문자열로 데이터를 은밀한하려면 메모리 부족 예외가 발생하거나 파일을 하드 드라이브에 캐시하지 않아도되도록 파일 크기를 조정하십시오.

2

C#을 찾고 계십니까?

string sixtyfour = System.Convert.ToBase64String(
         myFileUploadControl.FileBytes, 
         0, 
         myFileUploadControl.FileBytes.Length); 

파일 업로드 컨트롤의 내용을 base64로 가져와야합니다.

관련 문제