这是ASP Classic中将文件保存到磁盘的方法。这需要很长时间,但我不确定为什么。通常情况下,我不介意这么多,但它处理的文件非常大,所以需要比每秒100kB更快的速度。严重慢。 (旧的遗留系统,乐队援助修复,直到它被取代......)
Public Sub SaveToDisk(sPath)
Dim oFS, oFile
Dim nIndex
If sPath = "" Or FileName = "" Then Exit Sub
If Mid(sPath, Len(sPath)) <> "\" Then sPath = sPath & "\" '"
Set oFS = Server.CreateObject("Scripting.FileSystemObject")
If Not oFS.FolderExists(sPath) Then Exit Sub
Set oFile = oFS.CreateTextFile(sPath & FileName, True)
For nIndex = 1 to LenB(FileData)
oFile.Write Chr(AscB(MidB(FileData,nIndex,1)))
Next
oFile.Close
End Sub
我问,因为这段代码中有很多WTF,所以我在为这些火灾提供帮助的同时对抗这些火灾。
答案 0 :(得分:1)
我在你的代码中的任何地方都没有看到你对“FileData”的定义 - 这是从哪里来的?你有没有理由一次将它写入磁盘一个字符?我怀疑这是你的问题 - 写100K的数据需要100K次通过这个循环,这可能是你减速的原因。为什么不能替换底部的写循环:
For nIndex = 1 to LenB(FileData)
oFile.Write Chr(AscB(MidB(FileData,nIndex,1)))
Next
用一个语句一次写入文件?
oFile.Write FileData
答案 1 :(得分:1)
您应该做的是将二进制请求读入ADODB.Stream对象,并在一个快速步骤中将其转换为纯ASCII文本。
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Type = 1
objStream.Open
objStream.Write Request.BinaryRead(Request.TotalBytes)
objStream.Position = 0
objStream.Type = 2
objStream.Charset = "ISO-8859-1"
FormData = objStream.ReadText
objStream.Close
Set objStream = Nothing
注意变量FormData现在如何将表单数据包含为文本。然后解析此文本并找到每个文件的开始和长度,并使用ADODB.Stream CopyTo方法提取文件的特定部分并将其保存为磁盘。