提交页面
- <html>
- <body>
- <script language="javascript">
- var oXMLDoc = new ActiveXObject("Microsoft.XMLDOM"); //创建'MSXML'对象
- oXMLDoc.async = true;
- var theUniqueID= 0;
- var iTimerID=null; //这个变量是作定时器的ID
- //让数据提交的同时执行显示进度条的函数
- function UploadData()
- {
- theUniqueID = (new Date()).getTime() % 1000000000;
- // 清除原始数据
- PercentDone.style.width = "0%";
- ElapsedTime.innerHTML = "";
- TimeLeft.innerHTML = "";
- SizeCompleted.innerHTML = "";
- TotalSize.innerHTML = "";
- TransferRate.innerHTML = "";
- document.myform.action = "demo.asp?ProgressID=" + theUniqueID; //处理上传数据的程序
- //将提交的数据放在一个名字是upload隐藏的iframe里面处理,这样提交的页面就不会跳转到处理数据的页
- document.myform.target="upload"
- document.myform.submit(); //提交表单
- ProgressBar(); //开始执行反映上传情况的函数
- }
- function ProgressBar()
- {
- sURL = "Progress_Xml.asp?ProgressID=" + theUniqueID + "&temp="+Math.random(); //获取上传状态数据的地址
- oXMLDoc.onreadystatechange = Function( "fnLoadComplete();" );
- oXMLDoc.load( sURL );
- }
- function fnLoadComplete()
- {
- var iReadyState;
- try
- {
- iReadyState = oXMLDoc.readyState;
- }
- catch(e)
- {
- return;
- }
- if( iReadyState != 4 ) return;
- if( oXMLDoc == null || oXMLDoc.xml == "" )
- {
- window.status = 'Xml load fault';
- return;
- }
- var oRoot = oXMLDoc.documentElement; //获取返回xml数据的根节点
- if(oRoot != null)
- {
- if (oRoot.selectSingleNode("ErrorMessage") == null)
- {
- var readyState = oRoot.selectSingleNode("ReadyState").text;
- // 如果还没初始化完成,继续
- if ( readyState == "uninitialized" )
- {
- iTimerID = setTimeout("ProgressBar()", 1000);
- }
- // 上传进行中
- else if ( readyState == "loading" ) //文件上传结束就取消定时器
- {
- bar1.style.display = 'block'; //让显示上传进度显示的层的可见
- PercentDone.style.width = oRoot.selectSingleNode("Percentage").text; //设置进度条的百分比例
- //根据返回的数据在客户端显示
- ElapsedTime.innerHTML = oRoot.selectSingleNode("ElapsedTime").text; //显示剩余时间
- TimeLeft.innerHTML = oRoot.selectSingleNode("TimeLeft").text; //显示剩余时间
- SizeCompleted.innerHTML = oRoot.selectSingleNode("SizeCompleted").text; //已上传数据大小
- TotalSize.innerHTML = oRoot.selectSingleNode("TotalSize").text; //总大小
- TransferRate.innerHTML=oRoot.selectSingleNode("TransferRate").text; //传输速率
- //这里设定时间间隔是0.5秒,你也可以根据你的情况修改获取数据时间间隔
- iTimerID = setTimeout("ProgressBar()", 100);
- }
- // 上传结束
- else if ( readyState == "loaded" )
- {
- PercentDone.style.width = "100%"; //设置进度条的百分比例
- if (iTimerID != null)
- clearTimeout(iTimerID)
- iTimerID = null;
- alert("上传结束,服务器处理中...");
- }
- // 上传结束
- else
- {
- PercentDone.style.width = "100%"; //设置进度条的百分比例
- if (iTimerID != null)
- clearTimeout(iTimerID)
- iTimerID = null;
- alert("上传结束");
- }
- }
- else
- {
- alert(oRoot.selectSingleNode("ErrorMessage").text);
- upload.location.href = "about:blank";
- }
- }
- }
- function CacelUpload()
- {
- upload.location.href = "about:blank";
- if (iTimerID != null)
- clearTimeout(iTimerID)
- iTimerID = null;
- bar1.style.display = '';
- }
- </script>
- <base target="_blank">
- <form name="myform" method="post" action="demo.asp" enctype="multipart/form-data" target="upload">
- <h2>Asp无组件上传带进度条 </h2>
- <HR>
- 上传测试:<BR>
- <input type="file" name="filefield1">(请上传小于10MB的文件)<br>
- <input type="button" value="上传" onclick="UploadData()">
- <input type="button" value="取消上传" onclick="CacelUpload()"><br>
- <div id=bar1 style="display:">
- <table border="0" width="100%">
- <tr>
- <td><b>传送:</b></td>
- </tr>
- <tr bgcolor="#999999">
- <td>
- <table border="0" width="" cellspacing="1" bgcolor="#0033FF" id="PercentDone">
- <tr>
- <td> </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td>
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><td>总 大 小: </td><td id="TotalSize"></td></tr>
- <tr><td>已经上传: </td><td id="SizeCompleted"></td></tr>
- <tr><td>平均速率:</td><td id="TransferRate"></td></tr>
- <tr><td>使用时间:</td><td id="ElapsedTime"></td></tr>
- <tr><td>剩余时间:</td><td id="TimeLeft"></td></tr>
- </table>
- </td>
- </tr>
- </table>
- </div>
- <iframe name="upload" style="width:100%"></iframe>
- </form>
- </body>
- </html>
demo.asp
- <!-- #include file="Upload.asp" -->
- <%
- Server.ScriptTimeout = 9999
- set Upload = new DoteyUpload
- Upload.MaxTotalBytes = 10 *1024 *1024 ' 最大10MB
- Upload.ProgressID = Request.QueryString("ProgressID")
- Upload.Upload() '上传演示,不保存到硬盘
- If Request.TotalBytes > 10 *1024 *1024 Then
- Response.Write "不要上传超过10MB的文件"
- Response.End
- End If
- if Upload.ErrMsg <> "" then
- Response.Write(Upload.ErrMsg)
- Response.End()
- end if
- if Upload.Files.Count > 0 then
- Items = Upload.Files.Items
- end if
- Response.Write("您已上传 " & Upload.Files.Count & " 个文件到: " & path & "<hr>")
- for each File in Upload.Files.Items
- Response.Write("文件名: " & File.FileName & "<br>")
- Response.Write("文件大小: " & File.FileSize/1024 & " KB<br>")
- Response.Write("文件类型: " & File.FileType & "<br>")
- Response.Write("客户端路径: " & File.FilePath & "<br>")
- Response.Write("<hr>")
- next
- Response.Write("<br>")
- %>
upload.asp
- <%
- '-----------------------------------------------------
- ' 描述: Asp无组件上传带进度条
- ' 作者: 宝玉(www.webuc.net)
- ' 链接: www.pspsoft.com, www.cnforums.net, blog.joycode.com, www.cnblogs.com, www.51js.com
- ' 版本: 1.0 Beta
- ' 版权: 本作品可免费使用,但是请勿移除版权信息
- ' 推荐: asp.net上传组件(http://www.upload4asp.net/)
- '-----------------------------------------------------
- Dim DoteyUpload_SourceData
- Class DoteyUpload
- Public Files
- Public Form
- Public MaxTotalBytes
- Public Version
- Public ProgressID
- Public ErrMsg
- Private BytesRead
- Private ChunkReadSize
- Private Info
- Private Progress
- Private UploadProgressInfo
- Private CrLf
- Private Sub Class_Initialize()
- Set Files = Server.CreateObject("Scripting.Dictionary") ' 上传文件集合
- Set Form = Server.CreateObject("Scripting.Dictionary") ' 表单集合
- UploadProgressInfo = "DoteyUploadProgressInfo" ' Application的Key
- MaxTotalBytes = 1 *1024 *1024 *1024 ' 默认最大1G
- ChunkReadSize = 64 * 1024 ' 分块大小64K
- CrLf = Chr(13) & Chr(10) ' 换行
- Set DoteyUpload_SourceData = Server.CreateObject("ADODB.Stream")
- DoteyUpload_SourceData.Type = 1 ' 二进制流
- DoteyUpload_SourceData.Open
- Version = "1.0 Beta" ' 版本
- ErrMsg = "" ' 错误信息
- Set Progress = New ProgressInfo
- End Sub
- ' 将文件根据其文件名统一保存在某路径下
- Public Sub SaveTo(path)
- Upload() ' 上传
- if right(path,1) <> "/" then path = path & "/"
- ' 遍历所有已上传文件
- For Each fileItem In Files.Items
- fileItem.SaveAs path & fileItem.FileName
- Next
- ' 保存结束后更新进度信息
- Progress.ReadyState = "complete" '上传结束
- UpdateProgressInfo progressID
- End Sub
- ' 分析上传的数据,并保存到相应集合中
- Public Sub Upload ()
- Dim TotalBytes, Boundary
- TotalBytes = Request.TotalBytes ' 总大小
- If TotalBytes < 1 Then
- Raise("无数据传入")
- Exit Sub
- End If
- If TotalBytes > MaxTotalBytes Then
- Raise("您当前上传大小为" & TotalBytes/1000 & " K,最大允许为" & MaxTotalBytes/1024 & "K")
- Exit Sub
- End If
- Boundary = GetBoundary()
- If IsNull(Boundary) Then
- Raise("如果form中没有包括multipart/form-data上传是无效的")
- Exit Sub ''如果form中没有包括multipart/form-data上传是无效的
- End If
- Boundary = StringToBinary(Boundary)
- Progress.ReadyState = "loading" '开始上传
- Progress.TotalBytes = TotalBytes
- UpdateProgressInfo progressID
- Dim DataPart, PartSize
- BytesRead = 0
- '循环分块读取
- Do While BytesRead < TotalBytes
- '分块读取
- PartSize = ChunkReadSize
- if PartSize + BytesRead > TotalBytes Then PartSize = TotalBytes - BytesRead
- DataPart = Request.BinaryRead(PartSize)
- BytesRead = BytesRead + PartSize
- DoteyUpload_SourceData.Write DataPart
- Progress.UploadedBytes = BytesRead
- Progress.LastActivity = Now()
- ' 更新进度信息
- UpdateProgressInfo progressID
- Loop
- ' 上传结束后更新进度信息
- Progress.ReadyState = "loaded" '上传结束
- UpdateProgressInfo progressID
- Dim Binary
- DoteyUpload_SourceData.Position = 0
- Binary = DoteyUpload_SourceData.Read
- Dim BoundaryStart, BoundaryEnd, PosEndOfHeader, IsBoundaryEnd
- Dim Header, bFieldContent
- Dim FieldName
- Dim File
- Dim TwoCharsAfterEndBoundary
- BoundaryStart = InStrB(Binary, Boundary)
- BoundaryEnd = InStrB(BoundaryStart + LenB(Boundary), Binary, Boundary, 0)
- Do While (BoundaryStart > 0 And BoundaryEnd > 0 And Not IsBoundaryEnd)
- ' 获取表单头的结束位置
- PosEndOfHeader = InStrB(BoundaryStart + LenB(Boundary), Binary, StringToBinary(vbCrLf + vbCrLf))
- ' 分离表单头信息,类似于:
- ' Content-Disposition: form-data; name="file1"; filename="G:\homepage.txt"
- ' Content-Type: text/plain
- Header = BinaryToString(MidB(Binary, BoundaryStart + LenB(Boundary) + 2, PosEndOfHeader - BoundaryStart - LenB(Boundary) - 2))
- ' 分离表单内容
- bFieldContent = MidB(Binary, (PosEndOfHeader + 4), BoundaryEnd - (PosEndOfHeader + 4) - 2)
- FieldName = GetFieldName(Header)
- ' 如果是附件
- If InStr (Header,"filename=""") > 0 Then
- Set File = New FileInfo
- ' 获取文件相关信息
- Dim clientPath
- clientPath = GetFileName(Header)
- File.FileName = GetFileNameByPath(clientPath)
- File.FileExt = GetFileExt(clientPath)
- File.FilePath = clientPath
- File.FileType = GetFileType(Header)
- File.FileStart = PosEndOfHeader + 3
- File.FileSize = BoundaryEnd - (PosEndOfHeader + 4) - 2
- File.FormName = FieldName
- ' 如果该文件不为空并不存在该表单项保存之
- If Not Files.Exists(FieldName) And File.FileSize > 0 Then
- Files.Add FieldName, File
- End If
- '表单数据
- Else
- ' 允许同名表单
- If Form.Exists(FieldName) Then
- Form(FieldName) = Form(FieldName) & "," & BinaryToString(bFieldContent)
- Else
- Form.Add FieldName, BinaryToString(bFieldContent)
- End If
- End If
- ' 是否结束位置
- TwoCharsAfterEndBoundary = BinaryToString(MidB(Binary, BoundaryEnd + LenB(Boundary), 2))
- IsBoundaryEnd = TwoCharsAfterEndBoundary = "--"
- If Not IsBoundaryEnd Then ' 如果不是结尾, 继续读取下一块
- BoundaryStart = BoundaryEnd
- BoundaryEnd = InStrB(BoundaryStart + LenB(Boundary), Binary, Boundary)
- End If
- Loop
- ' 解析文件结束后更新进度信息
- Progress.UploadedBytes = TotalBytes
- Progress.ReadyState = "interactive" '解析文件结束
- UpdateProgressInfo progressID
- End Sub
- '异常信息
- Private Sub Raise(Message)
- ErrMsg = ErrMsg & "[" & Now & "]" & Message & "<BR>"
- Progress.ErrorMessage = Message
- UpdateProgressInfo ProgressID
- 'call Err.Raise(vbObjectError, "DoteyUpload", Message)
- End Sub
- ' 取边界值
- Private Function GetBoundary()
- Dim ContentType, ctArray, bArray
- ContentType = Request.ServerVariables("HTTP_CONTENT_TYPE")
- ctArray = Split(ContentType, ";")
- If Trim(ctArray(0)) = "multipart/form-data" Then
- bArray = Split(Trim(ctArray(1)), "=")
- GetBoundary = "--" & Trim(bArray(1))
- Else '如果form中没有包括multipart/form-data上传是无效的
- GetBoundary = null
- Raise("如果form中没有包括multipart/form-data上传是无效的")
- End If
- End Function
- ' 将二进制流转化成文本
- Private Function BinaryToString(xBinary)
- Dim Binary
- if vartype(xBinary) = 8 then Binary = MultiByteToBinary(xBinary) else Binary = xBinary
- Dim RS, LBinary
- Const adLongVarChar = 201
- Set RS = CreateObject("ADODB.Recordset")
- LBinary = LenB(Binary)
- if LBinary>0 then
- RS.Fields.Append "mBinary", adLongVarChar, LBinary
- RS.Open
- RS.AddNew
- RS("mBinary").AppendChunk Binary
- RS.Update
- BinaryToString = RS("mBinary")
- Else
- BinaryToString = ""
- End If
- End Function
- Function MultiByteToBinary(MultiByte)
- Dim RS, LMultiByte, Binary
- Const adLongVarBinary = 205
- Set RS = CreateObject("ADODB.Recordset")
- LMultiByte = LenB(MultiByte)
- if LMultiByte>0 then
- RS.Fields.Append "mBinary", adLongVarBinary, LMultiByte
- RS.Open
- RS.AddNew
- RS("mBinary").AppendChunk MultiByte & ChrB(0)
- RS.Update
- Binary = RS("mBinary").GetChunk(LMultiByte)
- End If
- MultiByteToBinary = Binary
- End Function
- ' 字符串到二进制
- Function StringToBinary(String)
- Dim I, B
- For I=1 to len(String)
- B = B & ChrB(Asc(Mid(String,I,1)))
- Next
- StringToBinary = B
- End Function
- '返回表单名
- Private Function GetFieldName(infoStr)
- Dim sPos, EndPos
- sPos = InStr(infoStr, "name=")
- EndPos = InStr(sPos + 6, infoStr, Chr(34) & ";")
- If EndPos = 0 Then
- EndPos = inStr(sPos + 6, infoStr, Chr(34))
- End If
- GetFieldName = Mid(infoStr, sPos + 6, endPos - _
- (sPos + 6))
- End Function
- '返回文件名
- Private Function GetFileName(infoStr)
- Dim sPos, EndPos
- sPos = InStr(infoStr, "filename=")
- EndPos = InStr(infoStr, Chr(34) & CrLf)
- GetFileName = Mid(infoStr, sPos + 10, EndPos - _
- (sPos + 10))
- End Function
- '返回文件的 MIME type
- Private Function GetFileType(infoStr)
- sPos = InStr(infoStr, "Content-Type: ")
- GetFileType = Mid(infoStr, sPos + 14)
- End Function
- '根据路径获取文件名
- Private Function GetFileNameByPath(FullPath)
- Dim pos
- pos = 0
- FullPath = Replace(FullPath, "/", "\")
- pos = InStrRev(FullPath, "\") + 1
- If (pos > 0) Then
- GetFileNameByPath = Mid(FullPath, pos)
- Else
- GetFileNameByPath = FullPath
- End If
- End Function
- '根据路径获取扩展名
- Private Function GetFileExt(FullPath)
- Dim pos
- pos = InStrRev(FullPath,".")
- if pos>0 then GetFileExt = Mid(FullPath, Pos)
- End Function
- ' 更新进度信息
- ' 进度信息保存在Application中的ADODB.Recordset对象中
- Private Sub UpdateProgressInfo(progressID)
- Const adTypeText = 2, adDate = 7, adUnsignedInt = 19, adVarChar = 200
- If (progressID <> "" And IsNumeric(progressID)) Then
- Application.Lock()
- if IsEmpty(Application(UploadProgressInfo)) Then
- Set Info = Server.CreateObject("ADODB.Recordset")
- Set Application(UploadProgressInfo) = Info
- Info.Fields.Append "ProgressID", adUnsignedInt
- Info.Fields.Append "StartTime", adDate
- Info.Fields.Append "LastActivity", adDate
- Info.Fields.Append "TotalBytes", adUnsignedInt
- Info.Fields.Append "UploadedBytes", adUnsignedInt
- Info.Fields.Append "ReadyState", adVarChar, 128
- Info.Fields.Append "ErrorMessage", adVarChar, 4000
- Info.Open
- Info("ProgressID").Properties("Optimize") = true
- Info.AddNew
- Else
- Set Info = Application(UploadProgressInfo)
- If Not Info.Eof Then
- Info.MoveFirst()
- Info.Find "ProgressID = " & progressID
- End If
- If (Info.EOF) Then
- Info.AddNew
- End If
- End If
- Info("ProgressID") = clng(progressID)
- Info("StartTime") = Progress.StartTime
- Info("LastActivity") = Now()
- Info("TotalBytes") = Progress.TotalBytes
- Info("UploadedBytes") = Progress.UploadedBytes
- Info("ReadyState") = Progress.ReadyState
- Info("ErrorMessage") = Progress.ErrorMessage
- Info.Update
- Application.UnLock
- End IF
- End Sub
- ' 根据上传ID获取进度信息
- Public Function GetProgressInfo(progressID)
- Dim pi, Infos
- Set pi = New ProgressInfo
- If Not IsEmpty(Application(UploadProgressInfo)) Then
- Set Infos = Application(UploadProgressInfo)
- If Not Infos.Eof Then
- Infos.MoveFirst
- Infos.Find "ProgressID = " & progressID
- If Not Infos.EOF Then
- pi.StartTime = Infos("StartTime")
- pi.LastActivity = Infos("LastActivity")
- pi.TotalBytes = clng(Infos("TotalBytes"))
- pi.UploadedBytes = clng(Infos("UploadedBytes"))
- pi.ReadyState = Trim(Infos("ReadyState"))
- pi.ErrorMessage = Trim(Infos("ErrorMessage"))
- Set GetProgressInfo = pi
- End If
- End If
- End If
- Set GetProgressInfo = pi
- End Function
- ' 移除指定的进度信息
- Private Sub RemoveProgressInfo(progressID)
- If Not IsEmpty(Application(UploadProgressInfo)) Then
- Application.Lock
- Set Info = Application(UploadProgressInfo)
- If Not Info.Eof Then
- Info.MoveFirst
- Info.Find "ProgressID = " & progressID
- If Not Info.EOF Then
- Info.Delete
- End If
- End If
- ' 如果没有记录了, 直接释放, 避免'800a0bcd'错误
- If Info.RecordCount = 0 Then
- Info.Close
- Application.Contents.Remove UploadProgressInfo
- End If
- Application.UnLock
- End If
- End Sub
- ' 移除指定的进度信息
- Private Sub RemoveOldProgressInfo(progressID)
- If Not IsEmpty(Application(UploadProgressInfo)) Then
- Dim L
- Application.Lock
- Set Info = Application(UploadProgressInfo)
- Info.MoveFirst
- Do
- L = Info("LastActivity").Value
- If IsEmpty(L) Then
- Info.Delete()
- ElseIf DateDiff("d", Now(), L) > 30 Then
- Info.Delete()
- End If
- Info.MoveNext()
- Loop Until Info.EOF
- ' 如果没有记录了, 直接释放, 避免'800a0bcd'错误
- If Info.RecordCount = 0 Then
- Info.Close
- Application.Contents.Remove UploadProgressInfo
- End If
- Application.UnLock
- End If
- End Sub
- End Class
- '---------------------------------------------------
- ' 进度信息 类
- '---------------------------------------------------
- Class ProgressInfo
- Public UploadedBytes
- Public TotalBytes
- Public StartTime
- Public LastActivity
- Public ReadyState
- Public ErrorMessage
- Private Sub Class_Initialize()
- UploadedBytes = 0 ' 已上传大小
- TotalBytes = 0 ' 总大小
- StartTime = Now() ' 开始时间
- LastActivity = Now() ' 最后更新时间
- ReadyState = "uninitialized" ' uninitialized,loading,loaded,interactive,complete
- ErrorMessage = ""
- End Sub
- ' 总大小
- Public Property Get TotalSize
- TotalSize = FormatNumber(TotalBytes / 1024, 0, 0, 0, -1) & " K"
- End Property
- ' 已上传大小
- Public Property Get SizeCompleted
- SizeCompleted = FormatNumber(UploadedBytes / 1024, 0, 0, 0, -1) & " K"
- End Property
- ' 已上传秒数
- Public Property Get ElapsedSeconds
- ElapsedSeconds = DateDiff("s", StartTime, Now())
- End Property
- ' 已上传时间
- Public Property Get ElapsedTime
- If ElapsedSeconds > 3600 then
- ElapsedTime = ElapsedSeconds \ 3600 & " 时 " & (ElapsedSeconds mod 3600) \ 60 & " 分 " & ElapsedSeconds mod 60 & " 秒"
- ElseIf ElapsedSeconds > 60 then
- ElapsedTime = ElapsedSeconds \ 60 & " 分 " & ElapsedSeconds mod 60 & " 秒"
- else
- ElapsedTime = ElapsedSeconds mod 60 & " 秒"
- End If
- End Property
- ' 传输速率
- Public Property Get TransferRate
- If ElapsedSeconds > 0 Then
- TransferRate = FormatNumber(UploadedBytes / 1024 / ElapsedSeconds, 2, 0, 0, -1) & " K/秒"
- Else
- TransferRate = "0 K/秒"
- End If
- End Property
- ' 完成百分比
- Public Property Get Percentage
- If TotalBytes > 0 Then
- Percentage = fix(UploadedBytes / TotalBytes * 100) & "%"
- Else
- Percentage = "0%"
- End If
- End Property
- ' 估计剩余时间
- Public Property Get TimeLeft
- If UploadedBytes > 0 Then
- SecondsLeft = fix(ElapsedSeconds * (TotalBytes / UploadedBytes - 1))
- If SecondsLeft > 3600 then
- TimeLeft = SecondsLeft \ 3600 & " 时 " & (SecondsLeft mod 3600) \ 60 & " 分 " & SecondsLeft mod 60 & " 秒"
- ElseIf SecondsLeft > 60 then
- TimeLeft = SecondsLeft \ 60 & " 分 " & SecondsLeft mod 60 & " 秒"
- else
- TimeLeft = SecondsLeft mod 60 & " 秒"
- End If
- Else
- TimeLeft = "未知"
- End If
- End Property
- End Class
- '---------------------------------------------------
- ' 文件信息 类
- '---------------------------------------------------
- Class FileInfo
- Dim FormName, FileName, FilePath, FileSize, FileType, FileStart, FileExt, NewFileName
- Private Sub Class_Initialize
- FileName = "" ' 文件名
- FilePath = "" ' 客户端路径
- FileSize = 0 ' 文件大小
- FileStart= 0 ' 文件开始位置
- FormName = "" ' 表单名
- FileType = "" ' 文件Content Type
- FileExt = "" ' 文件扩展名
- NewFileName = "" '上传后文件名
- End Sub
- Public Function Save()
- SaveAs(FileName)
- End Function
- ' 保存文件
- Public Function SaveAs(fullpath)
- Dim dr
- SaveAs = false
- If trim(fullpath) = "" Or FileStart = 0 Or FileName = "" Or right(fullpath,1) = "/" Then Exit Function
- NewFileName = GetFileNameByPath(fullpath)
- Set dr = CreateObject("Adodb.Stream")
- dr.Mode = 3
- dr.Type = 1
- dr.Open
- DoteyUpload_SourceData.position = FileStart
- DoteyUpload_SourceData.copyto dr, FileSize
- dr.SaveToFile MapPath(FullPath), 2
- dr.Close
- set dr = nothing
- SaveAs = true
- End function
- ' 取服务器端路径
- Private Function MapPath(Path)
- If InStr(1, Path, ":") > 0 Or Left(Path, 2) = "\\" Then
- MapPath = Path
- Else
- MapPath = Server.MapPath(Path)
- End If
- End function
- '根据路径获取文件名
- Private Function GetFileNameByPath(FullPath)
- Dim pos
- pos = 0
- FullPath = Replace(FullPath, "/", "\")
- pos = InStrRev(FullPath, "\") + 1
- If (pos > 0) Then
- GetFileNameByPath = Mid(FullPath, pos)
- Else
- GetFileNameByPath = FullPath
- End If
- End Function
- End Class
- %>
本日志由 flyinweb 于 2009-06-21 22:28:23 发表,目前已经被浏览 4100 次,评论 0 次;
引用通告:http://www.517sou.net/Article/83/Trackback.ashx
It is quite useful and interesting too.
VIRT 的上限是64G,也就是36位, cat /proc/cpuinfo的结果是:addre
昨天要准备用线程重写webbench,试验了下Fedora Linux 2.6.35.14
不明白您的具体的意思是什么?
已经发送到你QQ邮箱
http://www.2mysite.net/scriptencoder/screnc.asp 站长你好,看
你好,我发现一个问题,就是从mysqld2同步过来的数据,在mysqld1的
晕,我说是怎么回事情,原来我和你一样,忘记设置了活动分区