Form Post提交容量大的数据
在工作中遇到一个大问题,当表单需要传输的数据量非常庞大时,程序会出现错误。经过深入研究,在MSDN上找到了问题的根源:微软对Request.Form()接收的数据设定了最大限制,约为100K字节。这对于大量数据的传输来说,显然不够用。
微软建议采用Request.BinaryRead()来读取表单数据,但这种方法并不简单。因为它读取的是二进制数据,需要对这些数据逐字节进行分析,才能生成有意义的字符串。这对于英文系统来说尚可接受,但对于中文系统来说却是个烦。汉字的编码规律使得二进制数据的变得复杂。即使能够算法处理,面对MB级别的巨大数据量,逐字节分析的效率实在令人难以接受。
在深入研究后,我发现这个限制是针对表单内每个字段的,而不是整个表单的数据总和。我们找到了一个解决方案:对于需要传输大量数据的字段,在提交表单前,将数据分割成多个小于限制的小块,然后分别存放在多个隐藏的表单字段中。服务器端仍然使用Request.Form()读取这些隐藏字段的数据,然后按照顺序将它们合并。
下面是一个客户端的示例代码,它在表单提交前触发数据分割并存储到相应的隐藏字段中。这段代码主要在JavaScript中实现:
```html
客户端示例代码:
// 在表单的onSubmit事件中触发数据拆分并存储到隐藏字段中
function fnPreHandle() {
var iCount; // 用于记录分割的域数
var strData; // 原始数据
var iMaxChars = 50000; // 考虑汉字双字节,设置域的最大字符数限制为50K
var iBottleNeck = 2000000; // 如果数据量超过2M,提示用户
var strHTML; // 用于存储生成的HTML代码
strData = frmTest.BigField.value; // 获取需要分割的数据
if (strData.length > iBottleNeck) {
if (!confirm("您要发布的数据量太大,建议分割后分别发布。如果您坚持提交,请注意可能需要较长时间。是否坚持提交?")) {
return; // 用户选择取消,不执行提交
}
// 这里添加数据分割和存储到隐藏字段的代码
// ...
} else {
// 数据量正常,正常提交表单
// ...
}
}
```
前端JavaScript代码示例
在这段代码中,我们处理了一个大型数据域,将其拆分成多个隐藏域以进行处理。让我们逐行解读这段代码的魅力所在。
我们检查是否满足某些条件(这里假设为某种条件判断,但具体条件未给出)。如果不满足,我们直接返回false。
接下来,我们计算数据域需要拆分为多少个隐藏域。这个过程涉及到将数据的长度除以最大字符数,然后向上取整,以得到完整的子域数量。紧接着,我们生成对应的HTML代码,为每个子域创建一个隐藏的input标签。
然后,我们开始给每个子域赋值。通过遍历创建的隐藏域,我们将原数据域的内容按照指定的最大字符数进行拆分,并赋值给每个子域。为了清空原数据域,我们将其值设置为空字符串。
服务器端示例代码
在服务器端,我们通过接收表单提交的数据来处理这些隐藏的字段。我们从请求中获取每个隐藏字段的值,并将它们拼接起来,最终得到完整的数据。这个过程通过循环遍历所有的隐藏字段来实现。我们将完整的数据写入响应中,将其发送回客户端。
这就是我们的代码示例。通过这些代码,我们可以将大型数据域拆分为多个隐藏域进行处理,从而实现数据的灵活处理和传输。在这个过程中,我们充分利用了JavaScript和服务器端语言的能力,使得数据处理变得简单而高效。通过这样的处理方式,我们可以更好地处理大型数据,提高系统的性能和用户体验。
我们看到了一段`cambrian.render('body')`的代码。这可能是某种框架或库的调用,用于渲染页面的主体部分。不过由于缺少上下文信息,我们无法确定其具体作用。
编程语言
- Form Post提交容量大的数据
- vue-cli3使用 DllPlugin 实现预编译提升构建速度
- PHP PDO操作MySQL基础教程
- 微信小程序 (十八)picker组件详细介绍
- sqlserver 函数、存储过程、游标与事务模板
- 详解php中反射的应用
- Thinkphp5+uploadify实现的文件上传功能示例
- Git 命令使用技巧提供工作效率
- jsp Ewebeditor使用说明
- Yii框架中使用PHPExcel的方法分析
- vue-cli2打包前和打包后的css前缀不一致的问题解决
- 解决拦截器对ajax请求的拦截实例详解
- MVC4制作网站教程第三章 删除用户组操作3.4
- JS实现AES加密并与PHP互通的方法分析
- php设计模式之组合模式实例详解【星际争霸游戏
- 实例讲解PHP表单处理