Ada*_*dam 16 vbscript asp-classic
我有通过POST接受二进制数据的代码并读入一个字节数组.对于大于200 Kb的文件,操作失败.我已经检查了我的sysadmin(我们正在运行IIS 7)以查看我们的配置是否有限制,并且他说没有,并且怀疑它是代码的问题.这里有人看到任何潜在的问题吗?这是我的代码:
Public Sub Initialize
If Request.TotalBytes > 0 Then
Dim binData
binData = Request.BinaryRead(Request.TotalBytes) ' This line fails'
getData binData
End If
End Sub
Private Sub getData(rawData)
Dim separator
separator = MidB(rawData, 1, InstrB(1, rawData, ChrB(13)) - 1)
Dim lenSeparator
lenSeparator = LenB(separator)
Dim currentPos
currentPos = 1
Dim inStrByte
inStrByte = 1
Dim value, mValue
Dim tempValue
tempValue = ""
While inStrByte > 0
inStrByte = InStrB(currentPos, rawData, separator)
mValue = inStrByte - currentPos
If mValue > 1 Then
value = MidB(rawData, currentPos, mValue)
Dim begPos, endPos, midValue, nValue
Dim intDict
Set intDict = Server.CreateObject("Scripting.Dictionary")
begPos = 1 + InStrB(1, value, ChrB(34))
endPos = InStrB(begPos + 1, value, ChrB(34))
nValue = endPos
Dim nameN
nameN = MidB(value, begPos, endPos - begPos)
Dim nameValue, isValid
isValid = True
If InStrB(1, value, stringToByte("Content-Type")) > 1 Then
begPos = 1 + InStrB(endPos + 1, value, ChrB(34))
endPos = InStrB(begPos + 1, value, ChrB(34))
If endPos = 0 Then
endPos = begPos + 1
isValid = False
End If
midValue = MidB(value, begPos, endPos - begPos)
intDict.Add "FileName", trim(byteToString(midValue))
begPos = 14 + InStrB(endPos + 1, value, stringToByte("Content-Type:"))
endPos = InStrB(begPos, value, ChrB(13))
midValue = MidB(value, begPos, endPos - begPos)
intDict.Add "ContentType", trim(byteToString(midValue))
begPos = endPos + 4
endPos = LenB(value)
nameValue = MidB(value, begPos, ((endPos - begPos) - 1))
Else
nameValue = trim(byteToString(MidB(value, nValue + 5)))
End If
If isValid = True Then
intDict.Add "Value", nameValue
intDict.Add "Name", nameN
dict.Add byteToString(nameN), intDict
End If
End If
currentPos = lenSeparator + inStrByte
Wend
End Sub
Run Code Online (Sandbox Code Playgroud)
以下是日志中显示的错误:
Log Name: Application
Source: Active Server Pages
Date: 11/11/2010 2:15:35 PM
Event ID: 5
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: xxxxx.xxxxx.xxx
Description:
Error: File /path-to-file/loader.asp Line 36 Operation not Allowed. .
Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="Active Server Pages" />
<EventID Qualifiers="49152">5</EventID>
<Level>2</Level>
<Task>0</Task>
<Keywords>0x80000000000000</Keywords>
<TimeCreated SystemTime="2010-11-11T19:15:35.000Z" />
<EventRecordID>19323</EventRecordID>
<Channel>Application</Channel>
<Computer>PHSWEB524.partners.org</Computer>
<Security />
</System>
<EventData>
<Data>File /mghdev/loader.asp Line 36 Operation not Allowed. </Data>
</EventData>
</Event>
Run Code Online (Sandbox Code Playgroud)
Ant*_*nes 35
默认情况下,POST请求中实体大小的限制为200K,因此您的错误.
您可以增加该限制,打开IIS管理器并将树导航到您的应用程序.双击主面板中的"ASP"图标.展开"限制"类别.将"Maximum Requesting Entity Body Limit"修改为更大的值.
如果这是针对公共网站,请注意您设置的限制,限制的目的是防止恶意POST压倒网站.
如果您阅读 BinaryRead 方法的规范,您会发现该参数实际上也是一个输出参数。BinaryRead 方法试图更改 Request.TotalBytes 的值,但它无法执行此操作。TotalBytes 是只读的。
您可以通过将 TotalBytes 分配给变量并将其传入来轻松解决此问题。这是 MSDN 文档中示例代码显示的内容。
如果 BinaryRead 读取不同数量的数据,该变量将反映读取的大小。
| 归档时间: |
|
| 查看次数: |
23545 次 |
| 最近记录: |