Form Post提交容量大的数据
来源:asp之家 发布时间:2011-03-31 10:53:00
微软建议用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
%>


猜你喜欢
- 什么是组播点对点连接可以处理很多通信需求,不过随着直接连接数的增加,在多对通信方之间传递相同的消息会变得越来越困难。单独地向各个接收方发送消
- 目录Python的安装VS Code配置Hello World测试调用Python函数string.split()第一次尝试第二次尝试第三次
- 在使用go mod的过程中,发现不容易指定版本号尤其是没有打tag的,不知道怎么指定版本号, 不知道有哪版本号正常使用都没有问题,但是当引用
- 本文介绍了网页中插入视频播放的代码全集:有avi格式的视频,mpg格式,smi格式,rm格式,wmv格式,wma格式,Windows Med
- 一、背景(正)地理编码指的是:将地理位置名称转换成经纬度;逆地理编码指的是:将经纬度转换成地理位置信息,如地名、所在的省份或城市等百度地图提
- 本文实例讲述了JS实现控制表格内指定单元格内容对齐的方法。分享给大家供大家参考。具体如下:下面的代码控制表格单元格的内容向右对齐<!D
- 详细介绍Scrapy shell的使用Scrapy shell是Scrapy框架提供的一个非常有用的工具,可以帮助开发者快速地测试和调试Sc
- 最近做的都是前端的项目,很多项目都有回到顶部的需求,下面把我写js代码做个笔录,方便以后查找。发现还可以添加从快到慢的动画效果和随时下拉滚动
- Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。基本语法是通过 {} 和 :
- 实现制作抽奖程序,需要认知到我们可以看到一般抽奖程序界面上是有很多按钮的,比如中奖区域,按键开始区域等等,所以我们先要设置界面,然后把这些按
- Git修改已提交的commit注释两种情况:修改最后一次注释1、在命令行输入如下命令,然后回车:git commit --amend2、在命
- 最近学习了python基础,写一下3大排序练练手:'''Created on 2013-8-23@author: c
- DQL简介概念:DQL(data query language)数据查询语言 select操作排序规则:- select 表达式1|字段,.
- kafka go库kafka go客户端官方目前没有提供,但在github有2个非常流行的库星星较多,网上案例也多 https://gith
- 本文实例讲述了python函数enumerate,operator和Counter使用技巧。分享给大家供大家参考,具体如下:最近看人家的代码
- 以下分享一点我的经验 一般刚开始学SQL的时候,会这样写 SELECT * FROM table ORDER BY id LIMIT 100
- 引言:之前博文介绍过了mysql/oracle与ES之间的同步机制。而logstash最初始的日志同步功能还没有介绍。本文就logstash
- 概述要访问一个变量的内容,可以直接使用其名称。如果该变量是一个数组,可以使用变量名称和关键字或索引的组合来访问其内容。像其他变量一样,使用运
- 下表列出了所有Python语言支持的算术运算符。假设变量a持有10和变量b持有20,则: 例子:试试下面的例子就明白了所有的Pyt
- 起步在django框架中,用的是 pytz 库处理时区问题,所以我也尝试用这个库来处理。但发现了一个奇怪的问题:import datetim