2012-09-06 17 views
2

我实际上想使用jQuery将图片发送到我的服务器,而不使用html表单。但我想,因为我用的编码类型的HTML表单接受访问同一数据:什么编码用于多部分/表单数据,是否有可能使用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编码数据?

//编辑

从W3Schools的:http://www.w3schools.com/html5/att_form_enctype.asp

的multipart/form-data的==>没有字符被编码。当您使用具有文件上传控件的表单时,此值是必需的

我遇到的问题是,当我从FileReader中检索数据时,它与HTML表单数据中的数据不同。

针对同一图像: 与HTML表单:

\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"?>... 

与FileReader.readAsText():

\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

好,我居然找到了答案,同时测试了很多解决方案,并为它填充工具我发现的那个有点奇怪。

实际上,我使用函数FileReader.readAsDataURL()将数据作为Base64格式发送到我的服务器。

然后,我的数据split(',')只得到我的服务器端的Base64数据我使用my_base64_data_decoded = base64.b64decode(my_base64_data_encoded)

起初我使用“伯特”,用序列化数据发送这些数据到Amazon解码的数据: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); 
    } 
} 

Ofcourse,这是所有琐碎的,因为支持文件阿比Uint8Array的浏览器还支持FormData

+0

我用'FileReader.readAsBinaryString'检索完全相同的信息,实际上我的客户端和我的服务器之间没有编码差异... – kschaeffler

+0

我认为只是FileReader的功能没有提供与HTML表单相同的编码。问题是:如何检索相同的编码? – kschaeffler

相关问题