我正在尝试使用IE从工作人员发送multipart/form-data
。我已经使用formData
对象使用Chrome,Firefox,Safari完成了它(不支持IE,我需要手动的)
我发送的二进制数据是加密数据加密数据。使用formData
个对象:
var enc = new Buffer(encrypted.ciphertext.toString(CryptoJS.enc.Base64), 'base64');
formData.append("userFile" , new Blob([finalEncrypted], {type: 'application/octet-binary'}), 'encrypted')
this works fine generating a multipart like this(missed some parts of it):
请求标题:
Accept:*/*
Accept-Encoding:gzip, deflate
Cache-Control:no-cache
Connection:keep-alive
Content-Length:30194
Content-Type:multipart/form-data; boundary=WebKitFormBoundary0.gjepwugw5cy58kt9
体:
--WebKitFormBoundary0.gjepwugw5cy58kt9
Content-Disposition: form-data; name="userFile"; filename="encrypted"
Content-Type: binary
所有二进制数据
--WebKitFormBoundary0.cpe3c80eodgc766r--
使用手册multipart/form-data
:
IE11 doesn't accept readAsBinaryString(deprecated)
我想避免发送base64编码数据(readAsDataURL)(33%有效载荷)
我发送的二进制数据是加密数据加密数据。 我在尝试:
finalEncrypted = new Buffer(encrypted.ciphertext.toString(CryptoJS.enc.Base64), 'base64');
然后在我的手动多部分中,我尝试将缓冲区转换为二进制字符串:
item.toString('binary')
多部分结果看起来像这样:
--WebKitFormBoundary642013568702052
Content-Disposition: form-data; name="userfile"; filename="encrypted"
Content-Type: binary
所有二进制数据
ÐçÀôpRö3§]g7,UOÂmR¤¼ÚS"Ê÷UcíMÆÎÚà/,hy¼øsËÂú@WcGvºÆÞ²i¨¬Ç~÷®}éá?'é·J]þ3«áEÁÞ,4üBçðºÇª bUÈú4
T\Ãõ=òEnýR _[1J\O-ïǹ C¨\Ûøü^%éÓÁóJNÓï¹LsXâx>\aÁV×Þ^÷·{|'
在.NET服务器上,我们检查在客户端计算的哈希与在服务器上计算的哈希。哈希的服务器回复不匹配。这让我觉得我没有正确发送文件。
答案 0 :(得分:0)
看起来你还没有得到解决方案,至少你没有在这里发帖,如果你有的话。
在我的结尾,我使用jQuery来处理实际帖子的低级细节。
可能是你做了一件小事而且IE失败了。因为您没有显示您使用FormData的内容。很难看出你是否犯了错误。
// step 1. setup POST data
var data = new FormData();
data.append("some_variable_name", "value_for_that_variable");
data.append("some_blob_var_name", my_blob);
data.append("some_file_var_name", my_file);
// step 2. options
var ajax_options =
{
method: "POST",
processData: false,
data: data,
contentType: false,
error: function(jqxhr, result_status, error_msg)
{
// react on errors
},
success: function(data, result_status, jqxhr)
{
// react on success
},
complete: function(jqxhr, result_status)
{
// react on completion (after error/success callbacks)
},
dataType: "xml" // server is expected to return XML only
};
// step 3. send
jQuery.ajax(uri, ajax_options);
第1步。
创建一个FormData
对象并填充表单数据,其中包括变量和文件。您甚至可以添加 blob (如果我正确的话,JavaScript对象将转换为JSON
。)
第2步。
根据自己的喜好创建ajax_options
对象。虽然在这里我会显示method
,processData
,data
,contentType
,因为它们必须是您要发送FormData
的情况。至少,这对我有用......可能会改变其中的一些价值观。
dataType应设置为您期望的任何类型。
第3步。
使用jQuery库中的ajax()函数发送请求。它将根据客户端浏览器的需要构建正确的标题和结果。