2009-09-06 84 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

相关问题