2012-09-06 1 views
2

실제로 html 양식을 사용하지 않고 jQuery를 사용하여 내 서버에 그림을 보내려합니다. 그러나 나는 내가 인코딩 타입을 가진 HTML 양식을받은 것과 동일한 데이터를 검색하고 싶습니다 : multipart/form-data에 사용되는 인코딩은 무엇이며 JQuery를 사용하여 데이터를 인코딩 할 수 있습니까?

multipart/form-data 

나는 HTML5을 FileReader 사용 : http://www.html5rocks.com/en/tutorials/file/dndfiles/

을하지만 난 FileReader.readAsText(Blob|File, opt_encoding) 기능을 사용할 때. 검색 한 데이터는 html 형식으로 인코딩 된 것과 동일하게 인코딩되지 않습니다.

"multipart/form-data"에 사용되는 인코딩은 무엇이며 jquery 또는 javascript를 사용하여 데이터를 내 서버로 보내기 전에 인코딩 할 수 있습니까?

// 편집 W3 스쿨에서

: http://www.w3schools.com/html5/att_form_enctype.asp

다중/폼 데이터 ==> 어떤 문자 인코딩되지 않습니다. 이 값은 파일 업로드 컨트롤이있는 폼을 사용할 때 필요합니다.

문제는 FileReader에서 데이터를 검색 할 때 HTML 폼 데이터와 다른 데이터가 아닌 것입니다. 같은 사진에 대한

: HTML 양식 : FileReader.readAsText()와

\xff\xd8\xff\xe1\x00\x18Exif\x00\x00II*\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xec\x00\x11Ducky\x00\x01\x00\x04\x00\x00\x00U\x00\x00\xff\xe1\x03)http://ns.adobe.com/xap/1.0/\x00<?xpacket begin="\xef\xbb\xbf" id="W5M0MpCehiHzreSzNTczkc9d"?>... 

:

\xc3\xbf\xc3\x98\xc3\xbf\xc3\xa1\\u0000\\u0018Exif\\u0000\\u0000II*\\u0000\\b\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\xc3\xbf\xc3\xac\\u0000\\u0011Ducky\\u0000\\u0001\\u0000\\u0004\\u0000\\u0000\\u0000U\\u0000\\u0000\xc3\xbf\xc3\xa1\\u0003)http://ns.adobe.com/xap/1.0/\\u0000<?xpacket begin=\\"\xc3\xaf\xc2\xbb\xc2\xbf\\" id=\\"W5M0MpCehiHzreSzNTczkc9d\\"?> 

어떻게 같은 데이터를 검색 할?

+0

좋아요? http://stackoverflow.com/questions/5392344/sending-multipart-formdata-with-jquery-ajax – PinnyM

답변

0

확인을 지원하고 이후의 모든 사소한 사용하여에 대한 polyfill이다 내가 찾은 건 좀 이상해.

실제로, 서버에 자료를 보내려면 FileReader.readAsDataURL() 기능을 사용하여 Base64 형식으로 보내야합니다.

그런 다음, 나는에 데이터를 split(',') 단지 내 서버 측에서 Base64로 데이터가 내가 "BOTO"사용하고 사용하여 데이터를 직렬화 아마존이 데이터를 전송 처음에는

my_base64_data_decoded = base64.b64decode(my_base64_data_encoded)를 사용하여 디코딩 된 데이터를 얻을 : cStringIO.StringIO(my_base64_data_decoded) 및 그것은 작동하지 않았다.

나는 사전 my_dict 생성 :

을하고 난 다음

my_dict['data'] = base64.b64decode(my_base64_data_encoded)와 한 : cStringIO.StringIO(my_dict['data'])를하고는했다.

이제 제 질문은 사전에 삽입하는 동안 데이터에 어떤 과정이 수행 되었습니까?

하지만 적어도 대답을 찾았습니다.

1

비 텍스트 파일의 파일 내용을 가져 오려면 FileReader.readAsBinaryString을 사용해야합니다.

또한 데이터를 보내려고 할 때 인코딩되지 않을 수 있으므로 XMLHttpRequest.sendAsBinary을 사용할 수 있으며 비표준이며 Gecko (firefox)에서만 사용할 수 있습니다. 다음은이 당연히 Uint8Array

if (!XMLHttpRequest.prototype.sendAsBinary){ 
    XMLHttpRequest.prototype.sendAsBinary = function(datastr) { 
     function byteValue(x) { 
      return x.charCodeAt(0) & 0xff; 
     } 
     var ords = Array.prototype.map.call(datastr, byteValue); 
     var ui8a = new Uint8Array(ords); 
     this.send(ui8a.buffer); 
    } 
} 

이 파일 API와 Uint8Array를 지원하는 브라우저는 또한 솔루션을 많이 테스트하는 동안 실제로 답을 발견 FormData

+0

정확히 'FileReader.readAsBinaryString'을 사용하여 동일한 정보를 검색하고 실제로 클라이언트와 서버간에 인코딩의 차이는 없습니다. ... – kschaeffler

+0

FileReader의 기능 만이 HTML Form과 동일한 인코딩을 제공하지 않는다고 생각합니다. 질문 : 동일한 인코딩을 검색하는 방법? – kschaeffler

관련 문제