2009-09-06 44 views
0

我有一個數據庫表,其中用戶標記要下載的文件。隨後,我瀏覽此表並需要創建一個fileList傳遞給ActiveX下載程序。我的例程在本地和在服務器上僅用於第一個文件。我知道我的邏輯一定不好,但我找不到它。所有這些文件都始終是如下同一服務器的目錄:「d:\的Inetpub \虛擬主機\ WebSite.com \ sessionVideos \」如何檢索和下載服務器文件(File.Exists和URL)

Sub (GetFileList) 
Dim dtVideosSelected As New DataTable 
Dim drVideosSelected As New DataRow 
Dim strSourceDirectory As String = "sessionVideos/" 
Dim strServerBasePath As String = Server.MapPath(strSourceFileDirectory) 
Dim strFileName As String 
Dim fileInfo As System.IO.FileInfo 
Dim i As Int16 

Response.Clear() 
Response.ContentType = "text/plain" 
Response.Charset = "UTF-8" 

i = 0 
Do While i < dt VideosSelected.Rows.Count 
    drVideosSelected = dtVideosSelected.Rows(i) 
    strFileName = drVideosSelected("VID_FileName") 
    If File.Exists(strServerbasePath & strFileName) 
     fileInfo = New System.IO.FileInfo(strServerbasePath & strFileName) 
     Response.Write("*/* | " & fileInfo.Length & " | " & fileInfo.Name & " | ") 
     Response.Write(EncodeFileName(strSourceFileDirectory & fileInfo.Name) & vbCr 
      & vbLf) 
    End If 
    i += 1 
Loop 

Response.End() 
Response.Flush() 
End Sub 

Private Function EncodeFileName(ByVal fullPath As String) As String 
    Return Server.UrlEncode(fullPath).Replace("+", "%20").Replace("%2f", "/") 
End Function 

我已經嘗試了很多不同的東西,但沒有成功。

詹姆斯

+0

當你說這是行不通的,你的意思是該ActiveX控制研究沒有下載文件或你真的檢查了返回給瀏覽器的響應(像Fidler或Firebug中的net選項卡)並查看輸出結果(如果需要的話請包含它)。當你用調試器通過在i = 0語句中設置一個斷點並從那裏一步一步地運行來調試代碼時會發生什麼?你應該能夠看到它的功能。如果行數只有1或如果文件存在返回false等... – olle 2009-09-06 01:43:26

+0

讀你的評論adatapost他/她的建議我現在明白,它在本地正常工作,但不在服務器上。這表明問題不在您的代碼邏輯中。而是在本地和服務器配置之間有所不同。請在本地和服務器上檢查http響應。包括標題並比較這兩個。 – olle 2009-09-06 01:45:47

+0

對不起,我還不夠清楚。我的測試情況是,我有三個標記爲下載的文件(確認查詢返回這個)。我的循環在這裏只返回一個文件,而不是三個它應該。謝謝 - 詹姆斯 – James 2009-09-06 02:00:24

回答

0

好了,我們有一個答案....其實我對那些沒有工作的文件,但隱藏已知選項雙重文件擴展名擴展已打開(我猜是默認情況下)。 .avi文件看起來與其他文件相同,所以我想它正在考慮.avi是一個「未知」文件類型。隨你!

答案是我的其他帖子在這裏:

Why is FileInfo showing an extra file extension?

謝謝, 詹姆斯

0

要下載文件,

Dim b() As Byte = System.IO.File.ReadAllBytes(strServerbasePath & strFileName) 
Response.Clear() 
Response.ClearHeader() 
Response.AddHeader("Content-Type: application/octate-stream") 
Repponse.AddHeader("Content-Length: " & b.Length) 
Response.AddHeader("Content-Disposition: attachment; filename=" & strFileName) 
Response.BinaryWrite(b) 
Response.Flush() 
Response.End() 
+0

謝謝,但我不需要知道如何下載文件。我正在使用購買的ActiveX控件來完成這項工作。我正在下載多個文件,並需要在這裏創建文件列表以傳遞給下載程序。問題是它只拾取第一個文件。我確信在這裏我的書面邏輯存在一個問題。再次,這在本地工作很好,但不在服務器上。 謝謝, James – James 2009-09-06 01:41:41

相關問題