解决大字段在Form中Post出错的方法(2)
发布时间:2008-04-17 14:00:00
标签:post,form,错误,微软
下面再给大家提供一个我在CSDN上发现的一个帖子,和我写的异曲同工,解决了一样的问题,方法也一样,供参考:
如何在Form域中Post大于100K字节的数据????
以前在工作中遇到一个问题,当表单发送的数据量很大时,就会报错。查阅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 i
intFieldCount = Request.Form("hdnCount")
For i=1 To intFieldCount
strData = strData & Request.Form("hdnBigfield" & i)
Next
Response.Write strData
%>


猜你喜欢
- JSON编码支持的基本数据类型为 None , bool , int , float 和 str , 以及包含这些类型数据的lists,tu
- 1.表格<!doctype html> <html> <head> <meta charset=&
- 前面简单介绍了Python基本运算,这里再来简单讲述一下Python字符串相关操作1. 字符串表示方法>>> "
- 本文实例讲述了Python实现读写sqlite3数据库并将统计数据写入Excel的方法。分享给大家供大家参考,具体如下: src
- 模块a.py 想用 b.py中公有数据 cntb的python文件#!/usr/bin/env python# coding:utf8fro
- 本文实例讲述了JavaScript实现的反序列化json字符串操作。分享给大家供大家参考,具体如下:JavaScript中如何反序列化jso
- 在IDLE下清屏:#网上有些先定义函数,再?print("\n" * 100)输出一百个换行的方法有点扯淡,跟连按回车没
- 1. 检查mysql服务是否启动,如果启动,关闭mysql服务运行命令:ps -ef | grep -i mysql如果开着就运行关闭的命令
- 序言作为当代新青年,应该多少会点短视频制作吧?哈哈,那当代自媒体创作者好了~制作视频的时候,多少需要一些搞怪的声音?或者奇怪的声音?音乐等等
- 直接赋值:其实就是对象的引用(别名)。浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。深拷贝(deepcopy): copy 模
- 序对于如何将py文件打包生成exe可执行文件最简单的应该我觉得就是使用pyinstaller第三方模块下面我就分为三个步骤给大家讲解如何使用
- 我的需求:手动配置X轴、Y轴、图表标题等参数自动通过Pyecharts模块生成可视化的html数据图表,并将浏览器图表展示到UI界面上。制作
- 不过,如果您需要查找文档中的一个特定的元素,最有效的方法是 getElementById()。 不过要注意的是使用getElementByI
- 关于 WARNING: Ignoring invalid distribution -pencv-python … 警
- 任务1、 Mini计算器看出来错误了吗,哈哈哈哈哈哈,那三个点自己加的,本质应该是函数折叠完整的代码:ef calc(a,b,op):? ?
- 一、效果展示文件上传和展示:文件搜索:文件下载:删除文件:二、关键代码#urls.pyfrom django.urls import pat
- python具体强大的库文件,很多功能都有相应的库文件,所以很有必要进行学习一下,其中有一个ftp相应的库文件ftplib,我们只需要其中的
- 首先我们介绍使用自己的数据库查询多个手机号码,那还是建议你拥有一个自己的的手机号码数据库。正常情况下,只是满足一般查询的话,你不需要去购买专
- DataFrame对象本质上是带有行列索引的二维矩阵,所以欲对DataFrame对象进行转置操作,需要交换行列索引,同时使二维矩阵转置。首先
- 本文实例讲述了Golang正整数指定规则排序算法问题。分享给大家供大家参考,具体如下:给定字符串内有很多正整数,要求对这些正整数进行排序,然