編寫思路:把本地文件在客戶端通過base64編碼以後發送目的地.
測試過程中,上傳文件過大,導致超時不成功.
後來經過改善.把編碼分段發送.測試20M成功
編寫目的:在傳統的解決方案裡面,一次一次選取上傳可以.但是在碰到把數據庫裡文件路徑讀出來,並把這些文件上傳到一個地方的時候就比較麻煩.
如果得到路徑一個一個去找到用ftp當然也是可以的,但每次找這些文件我看都會比較費時。這裡編寫這個主要就是為了通過數據庫裡的文件路徑取得文件.把文件一次批量上傳到一個地方.
其主要目的還是為了鍛煉一下自己.
解決過程:起初試著用模擬鍵盤輸入強行賦值給file控件用傳統的方法上傳。可是老碰到空值的情況,以至有很多文件沒有發送出去。查閱一些資料,現在是把所有路徑通過數據庫取到然後寫到一個js裡。然後在前台用js讀取這些路徑,通過xmlhttp來發送文件。
因為ie不太喜歡xmlHttp.總認為他有惡意行為.所以老談出提示警告.所以操作的時候不能使用web路徑.只能用物理路徑去訪問它.
然後服務端有一文件來接收這些編碼,並對其進行解碼.所以我稱之為"c/s". ^_^
目前很多代碼還在完善中.
簡單介紹一下:
-------------------------------------------------------------
aryFiles.push("c:\\aaa.zip") ;
aryFiles.push("c:\\bbb.exe") ;
這裡為文件路徑和文件.可為多個
以後這個路徑也可以通過file控件在客戶端取到
http:// www.xxx.com/xxx/xxx.asp
這個是目的地,可以改為自己想要的地址.
ado_stream.LoadFromFile(server.mappath(".") &"/"& + str_filename)
server.mappath(".") &"/"& + str_filename 這裡是讀取文件.
server.mappath(".") &"/"& 路徑和存放路徑一致
ado_stream.SaveToFile server.mappath(".") &"/"& str_filename,2
server.mappath(".") &"/"& 這個為存放文件的路徑. str_filename 為文件名
這裡讀取和存放都是放在程序所放目錄中.大家測試的時候也可以保持這樣即可
把第一段代碼放到本地(eg:c:\upload.htm)
把第二段代碼放到服務器上,可以是本地服務器,可以是公網服務器.和上面的目的地保持一致
(eg:http://www.xxx.com/upload.asp or http:// localhost/www/upload.asp)
----------------------------------------------------------------
操作:找到第一段代碼保存的地方。執行即可(eg:打開c盤執行upload.htm)
客戶端代碼
[Ctrl+A 全選 注:如需引入外部Js需刷新才能執行]
服務器端
<%@ LANGUAGE=VBScript%> <% Option Explicit Response.Expires = 0
' 定義變量和對象。 dim ado_stream dim xml_dom dim xml_data dim str_filename dim bol_PartStart dim int_PartID dim bol_PartEnd
' 創建 Stream 對象 set ado_stream = Server.CreateObject("ADODB.Stream") ' 從Request對象創建 XMLDOM對象 set xml_dom = Server.CreateObject("MSXML2.DOMDocument") xml_dom.load(request) ' 讀出包含二進制數據的節點 set xml_data = xml_dom.selectSingleNode("root/upData") str_filename = xml_data.getAttribute("FileName") bol_PartStart = CBool(xml_data.getAttribute("PartStart")) int_PartID = CInt(xml_data.getAttribute("PartID")) bol_PartEnd = CBool(xml_data.getAttribute("PartEnd"))
' 打開Stream對象,把數據存入其中 ado_stream.Type = 1 ' 1=adTypeBinary ado_stream.open if not bol_PartStart then ado_stream.LoadFromFile(server.mappath(".") &"/"& + str_filename) ' 讀取文件 ado_stream.position = ado_stream.size end if ado_stream.Write xml_data.nodeTypedValue ' 文件存盤 ado_stream.SaveToFile server.mappath(".") &"/"& str_filename,2 '保存文件 2=adSaveCreateOverWrite ado_stream.close
' 釋放資源 set ado_stream = Nothing set xml_dom = Nothing ' 向浏覽器返回信息 Response.Write "Upload successful!"& str_filename & int_PartID & bol_PartStart %>
[Ctrl+A 全選 注:如需引入外部Js需刷新才能執行]