Form域中用Post提交容量大的数据

转载 2006年06月24日 16:07:00

参考:

Form域中用Post提交容量大的数据
http://www.51cto.com 2005-09-14 18:05 出处:PConline
 
 
 

 

以前在工作中遇到一个问题,当表单发送的数据量很大时,就会报错。查阅MSDN了解到,原因是微软对用Request.Form()可接收的最大数据限制为100K字节。

微软建议用Request.BinaryRead()读取表单数据,但由于这种方法读出的是二进制数据,需要对读出的数据逐字节进行分析,生成有意义的字符串(MSDN上的一段程序就是这样写的,但它并没有考虑诸如标点符号等转义字符需要进行特殊分析)。如果说这种方法对于纯英文系统勉强可用的话,则对于中文系统来说就有极大的麻烦,因为汉字是用两个字节表示的,而读出的二进制数据本身并不能判断是英文还是汉字(否则就不是二进制数据,而是字符串了^-^)。这样的话就必须了解汉字的编码规律才能进行分析。最后,即使算法上能把这些都分析出来,大家想想对于一个MB级的巨型字符串逐字节进行分析,其效率何如?所以,此路不通!

不过,办法总是有的。一开始我以为是整个表单数据的总和不能超过100KB,后来发现这是对表单内每个域的限制。问题的解决办法是,对于一个需要发送大数据的域,在提交表单前将数据拆分为小于限额的数份,分别放在数个hidden域中,同时把原有域清空,再正式提交表单。服务器端还是用Request.Form()读取各hidden域的数据,再按照顺序把他们拼接起来就行了。主要代码如下:

注意:需要在Form中的HTML代码内指定一个DIV,以便向其中动态插入hidden域。

====客户端示例代码====

<SCRIPT language=javascript>

//数据拆分,并放到相应的hidden域中,在Form的onSubmit事件中激发

function fnPreHandle()

{

var iCount; //拆分为多少个域

var strData; //原始数据

var iMaxChars = 50000;//考虑到汉字为双字节,域的最大字符数限制为50K

var iBottleNeck = 2000000;//如果文章超过2M字,需要提示用户

var strHTML;//原始数据

strData = frmTest.BigField.value;//如果文章实在太长,需要提醒用户

if (strData.length > iBottleNeck)

{

if (confirm("您要发布的文章太长,建议您拆分为几部分分别发布。/n如果您坚持提交,注意需要较长时间才能提交成功。/n/n是否坚持提交?") == false)

return false;

}iCount = parseInt(strData.length / iMaxChars) + 1;//hdnCount记录原数据域拆分为多少个子域

strHTML = "<input type=hidden name=hdnCount value=" + iCount + ">";//生成各子域的HTML代码

for (var i = 1; i <= iCount; i++)

{

strHTML = strHTML + "/n" + "<input type=hidden name=hdnBigField" + i + ">";

}//在Form中DIV(divHidden)内动态插入各hidden域的HTML代码

document.all.divHidden.innerHTML = strHTML;//给各子域赋值

for (var i = 1; i <= iCount; i++)

{

frmTest.elements["hdnBigField" + i].value = strData.substring((i - 1) * iMaxChars, i * iMaxChars);

}//原数据域清空

frmTest.BigField.value = "";

}

</SCRIPT>



====服务器端示例代码====

<%

Dim strData

Dim intFieldCount

Dim iintFieldCount = Request.Form("hdnCount")For i=1 To intFieldCount

strData = strData & Request.Form("hdnBigfield" & i)

NextResponse.Write strData

%>

相关文章推荐

form 提交 无法显示该网页 数据量大提交Post too large错误

如果form表单提交数据量大的时候会出现无法显示该网页。 解决办法1: 在 $TOMCAT_HOME$/conf/server.xml中找到  maxHttpHeaderSize...

PHP中用jQuery 的操作POST方法提交数据(用login测试)

用户登录 用户名: 密 码:

asp.net JS+form表单Post和Get方式提交数据

最近工作中用到了一种使用JS+form用post方式上传文件一种方式。前台用Html input,使用JS方式往服务器上传文件,具体实现看代码: 前台页面使用aspx网页,使用input 标...

java中form以post、get方式提交数据中文乱码问题总结

一:form在前台以post方式提交数据:     浏览器将数据(假设为“中国”)发送给服务器的时候,将数据变成0101的二进制数据(假设为98 99)时必然要查码表,浏览器以哪个码表打开网页,浏览...

django 用ajax+post提交form 实现前后台数据绑定

首先要引入jquery文件,可以引入在线的,也可以下载离线的 添加进自己staticfiles 这里演示的是添加离线的 注意这句是要添加到自己写的ajax jquery脚本前。 然后HT...

c# 模拟表单提交,post form 上传文件、大数据内容

表单提交协议规定: 要先将 HTTP 要求的 Content-Type 设为 multipart/form-data,而且要设定一个 boundary 参数, 这个参数是由应用程序自行产生,它会用...

对表单form get或post提交数据乱码的终极处理方式

我们先定义一个监听器叫做EncodeFilter,哎,还是贴代码吧,语言太苍白了package com.zgf.filter; import java.io.BufferedReader; impo...

Form Post数据 + Iframe跨域回调 全公开

Script标签跨域简单易懂,对于没有Post要求的数据请求,还是使用Script标签+Jsonp比较靠谱: 代码: a.scriptGet = function (url, callback,o...
  • okkk
  • okkk
  • 2015-09-15 19:40
  • 2769

form 表的post提交,其中一个超多数据的input标签在后台获取数据被截断的解决方法

在开发中发现一个bug,前台提交的数据到后台获取的时候被截断了,前台代码 我用js给input标签赋值,这个值长度很长很长(如:一段超长的html代码),$("input...

android中用GET和POST的方法向服务器上传数据

两者的区别如下: GET上传的数据一般是很小的并且安全性能不高的数据, 而POST上传的数据适用于数据量大,数据类型复杂,数据安全性能要求高的地方 GET和POST的使用方法一般如下: 1.采用...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)