免费体验120秒视频_榴莲榴莲榴莲榴莲官网_2021国产麻豆剧果冻传媒入口_一二三四视频社区在线
當前位置: 首頁IT技術 → 關于ASP中大字段在Form中Post出錯的解析

關于ASP中大字段在Form中Post出錯的解析

更多

這篇文章將會介紹到關于ASP中大字段在Form中Post出錯的解析,希望對大家能夠有幫助。

我們在使用很多新聞系統的時候,都會發現一個問題,尤其是使用 HtmlEdit 從WORD文檔中直接拷貝文章(尤其里面有復雜表格和文字)的時候,提交會有一個錯誤發生。

"Request Object, ASP 0107 (0x80004005)"

很多編程人員都以為是 access 數據庫備注字段64kb限制的問題,開始 icech 也以為是,但是后來用了其他新聞系統的 SQL 版本,同樣的問題發生了。因此我猜想,可能是瀏覽器的問題。但是 Form 表單使用的都是 Post 方式,應該和瀏覽器無關,那是什么原因呢?

程序出錯提示總是在 Request.Form(“xxx”)的地方,因此我判斷,可能是Request有大小的限制。然后就去MSDN上查找“ASP 0107 (0x80004005)”,果然是Request的問題。微軟的原文是這樣的。

PRB: Error "Request Object, ASP 0107 (0x80004005)" When You Post a Form

The information in this article applies t

microsoft Active Server Pages

This article was previously published under Q273482

SYMPTOMS

When you post a large form field in Microsoft Internet Information Services 5.0, you may receive the following error message:

Error Type:

Request object, ASP 0107 (0x80004005)

The data being processed is over the allowed limit.

When you post a large form field in Microsoft Internet Information Server 4.0, you may receive the following error message:

Request object error 'ASP 0107 : 80004005'

Stack Overflow

/projectname/page.asp, line XX

The data being processed is over the allowed limit.

CAUSE

The size limit of each form field that is retrieved in the Request object is 102,399 bytes. The error occurs when you exceed this limit.

RESOLUTION

To resolve this problem, use one of the following methods:

Instead of reading form variable values with the Request.Form collection, use Request.BinaryRead (Request.TotalBytes), and parse the form values from the output of Request.BinaryRead.

Use a File Upload scheme, such as Microsoft Posting Acceptor.

Break the HTML form variables into multiple form variables before you submit the form. The 102,399 byte limit is for each form variable, so you can have multiple form variables of 102,399 characters or less. The following sample code illustrates this: WARNING: ANY USE BY YOU OF THE CODE PROVIDED IN THIS ARTICLE IS AT YOUR OWN RISK. Microsoft provides this code "as is" without warranty of any kind, either express or implied, including but not limited to the implied warranties of merchantability and/or fitness for a particular purpose.

<FORM method=post action=LargePost.asp name=theForm onsubmit="BreakItUp()">

<Textarea rows=3 cols=100 name=BigTextArea>A bunch of text...</Textarea>

<input type=submit value=go>

</form>

<SCRIPT Language=java script>

function BreakItUp()

{

//Set the limit for field size.

var FormLimit = 102399

//Get the value of the large input object.

var TempVar = new String

TempVar = document.theForm.BigTextArea.value

//If the length of the object is greater than the limit, break it

//into multiple objects.

if (TempVar.length > FormLimit)

{

document.theForm.BigTextArea.value = TempVar.substr(0, FormLimit)

TempVar = TempVar.substr(FormLimit)

while (TempVar.length > 0)

{

var objTEXTAREA = document.createElement("TEXTAREA")

objTEXTAREA.name = "BigTextArea"

objTEXTAREA.value = TempVar.substr(0, FormLimit)

document.theForm.appendChild(objTEXTAREA)

TempVar = TempVar.substr(FormLimit)

}

}

}

</SCRIPT>

The receiving Active Server Page (ASP) page reconstructs the variable:

<%

Dim BigTextArea

For I = 1 To Request.Form("BigTextArea").Count

BigTextArea = BigTextArea & Request.Form("BigTextArea")(I)

Next

%>

100 K的限制?微軟竟然來這一手!幸好他們自己給出了幾個解決方案,看一下上文可以知道,微軟提供了2種可行的方法:

第一種使用Request.BinaryRead (Request.TotalBytes),第二種使用分段上傳的方式,基于少更改程序的原則,我們采用第二種方式。但是在使用的過程中,icech無意中發現,直接使用

For I = 1 To Request.Form("BigTextArea").Count

BigTextArea = BigTextArea & Request.Form("BigTextArea")(I)

Next

來代替Request.Form("BigTextArea")竟然也能達到同樣的效果!驚奇!我想可能系統每次將100K的內容發送給Request,上段程序又在進行循環,因此達到了同樣的效果。

以上是icech解決問題的方法,現在新聞系統例如:喬客、動力、惠信比較好的系統也都存在這個問題,大家可以試著用這種方法來解決。

下面再給大家提供一個我在CSDN上發現的一個帖子,和我寫的異曲同工,解決了一樣的問題,方法也一樣,供參考:

如何在Form域中Post大于100K字節的數據????

以前在工作中遇到一個問題,當表單發送的數據量很大時,就會報錯。查閱MSDN了解到,原因是微軟對用Request.Form()可接收的最大數據限制為100K字節。

微軟建議用Request.BinaryRead()讀取表單數據,但由于這種方法讀出的是二進制數據,需要對讀出的數據逐字節進行分析,生成有意義的字符串(MSDN上的一段程序就是這樣寫的,但它并沒有考慮諸如標點符號等轉義字符需要進行特殊分析)。如果說這種方法對于純英文系統勉強可用的話,則對于中文系統來說就有極大的麻煩,因為漢字是用兩個字節表示的,而讀出的二進制數據本身并不能判斷是英文還是漢字(否則就不是二進制數據,而是字符串了^-^)。這樣的話就必須了解漢字的編碼規律才能進行分析。最后,即使算法上能把這些都分析出來,大家想想對于一個MB級的巨型字符串逐字節進行分析,其效率何如?所以,此路不通!

不過,辦法總是有的。一開始我以為是整個表單數據的總和不能超過100KB,后來發現這是對表單內每個域的限制。問題的解決辦法是,對于一個需要發送大數據的域,在提交表單前將數據拆分為小于限額的數份,分別放在數個hidden域中,同時把原有域清空,再正式提交表單。服務器端還是用Request.Form()讀取各hidden域的數據,再按照順序把他們拼接起來就行了。主要代碼如下:

注意:需要在Form中的HTML代碼內指定一個DIV,以便向其中動態插入hidden域。

====客戶端示例代碼====

<script language=java script>

//數據拆分,并放到相應的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

%>

你說微軟為什么要有個100KB的限制呢?渾!

熱門評論
最新評論
昵稱:
表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
字數: 0/500 (您的評論需要經過審核才能顯示)
免费体验120秒视频_榴莲榴莲榴莲榴莲官网_2021国产麻豆剧果冻传媒入口_一二三四视频社区在线
主站蜘蛛池模板: 青青久操| 精品欧美一区二区在线观看| 国产日韩精品欧美一区喷水| 69影院毛片免费观看视频在线| 欧美影院一区二区| 成人无遮挡裸免费视频在线观看| 亚洲精品nv久久久久久久久久| 成人片黄网站色大片免费| 狠狠精品干练久久久无码中文字幕| 亚洲人成中文字幕在线观看| 一级一级人与动毛片| 亚洲天堂欧美| 久久精品亚洲一区二区| baoyu122.永久免费视频| 雨宫琴音加勒比在线观看| 朝桐光亚洲专区在线中文字幕| 国产六月婷婷爱在线观看| 狠狠躁夜夜躁人人爽天天古典| 国产人妖xxxx做受视频| 亚洲大尺度无码无码专区| 久久综合九色综合网站| 特黄大片aaaaa毛片| 日本xxxx色视频在线播放| 又粗又硬又大又爽免费视频播放| 久久国产精品99精品国产| 波多野结衣无内裤护士| 黄污视频| 四虎www| 欧美大阴口| 电台女诗岚第1到4部分| 丝袜乱系列大全目录| 欧美女人毛茸茸| yy6080欧美三级理论| 久久狠狠躁免费观看2020| 欧洲成人r片在线观看| 精品小视频在线| 大胸年轻的搜子4理论| 国产免费全部免费观看| 激情综合色五月六月婷婷| japan高清日本乱xxxxx| 高清有码国产一区二区|