2016-10-26 3 views
0

내가 가진 이진 (ZIP) 파일 데이터를 인코딩 및 C#에서 디코딩 전송 압축 파일 I 인코딩 문자열 및 디코드로 전송하고 서버 측에 저장하려면 :자바 스크립트 -

이 코드를 클라이언트 (JS)에서의 부호화 :

var fileAsText = '' 
var reader = new FileReader() 
reader.onload = function (event) { 
    fileAsText = encodeURIComponent(event.target.result) 
} 
reader.readAsText(zipFile) 

zipFile는 (사용자가 업로드) 입력 파일 오브젝트이다.

내가

모든 것이 잘 작동 (이것은 내가 encodeURIComponent을 사용하고 있습니다 이유입니다)하지만, 서버 측에서 내가이 문자열을 다시 디코딩을을 할 JSON 내부 Post로 전송하고있어 fileAsText 문자열 바이너리 (zip 파일)로 압축을 풉니 다. 그리고 나는 정확히 동일한 파일을 클라이언트 측에서 업로드하도록하고 싶습니다.

이것은 C#을 내 코드입니다 :

using (var bw = new BinaryWriter(File.Open("fileTest.zip", FileMode.Create))) 
{ 
     bw.Write(HttpUtility.UrlDecode(fileAsText)); 
} 

문제 : 내가 같은 파일을 얻을하지 않습니다 나는 디코더 HttpUtility.UrlDecode가 맞지 믿는다 (이진 데이터는 diffrent입니다) encodeURIComponent

사용자가 업로드 한 동일한 파일 바이너리 데이터를 얻는 방법에 대한 아이디어가 있으십니까?

+2

Convert.FromBase64String를 사용하여 이진하기 위해 당신은 아마 JSON 및 파일을 모두 결합 formData를 사용 후 그대로 ... 블롭을 보내고 ... 텍스트로 읽을 수 있습니다. 당신이 filereader를 사용하여 텍스트로 읽은 순간부터 깨진 데이터를 얻었습니다. Javascript는 바이너리 문자열을 잘 처리 할 수 ​​없다. – Endless

+0

@ 끝이 없다. 텍스트로 읽는 이유가있다. 설명하기가 복잡하다. (제한 사항) reader.readAsText를 사용해야하는 경우 해결책을 찾아 보자. – cheziHoyzer

+0

왜 json으로 게시해야합니까? 나쁜 생각이야. 더 많은 필드 ([FormData] (https://developer.mozilla.org/en-US/docs/Web/API/FormData))가 필요하면'xhr.send (zipFile)'처럼 보내거나 multipart 업로드를 사용할 수 있습니다.) – Endless

답변

1

자바 스크립트에서 바이너리 문자열이 잘 작동하지 않는 것이 가장 좋은 방법은 멀티 파트 양식 데이터로 게시하는 것입니다. 당신이 정말로 빠른 수정은 단지 변화

64 기수로 보내려면 다음 최고의 일부 서버 제한의 사촌 JSON으로 게시해야하는 경우

는 그러나 readAsText-readAsDataURL 그런 다음 서버 측에서 다시 변환

byte[] data = Convert.FromBase64String(encodedString);