【发布时间】:2009-09-06 01:18:29
【问题描述】:
我有一个数据库表,用户在其中标记要下载的文件。随后,我浏览此表并需要创建一个 fileList 以传递给 ActiveX 下载器。我的例程在本地和服务器上仅针对第一个文件工作。我知道我的逻辑一定很糟糕,但我找不到。所有这些文件始终位于同一服务器目录中,如下所示:“D:\inetpub\vhosts\WebSite.com\sessionVideos\”
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
我尝试了很多不同的方法,但都没有成功。
詹姆斯
【问题讨论】:
-
当您说它不起作用时,您的意思是 activex 控件没有下载文件还是您实际上检查了返回到浏览器的响应(使用诸如提琴手或网络标签之类的东西firebug)并查看输出(如果有,请包含它)。另外,当您通过在 i = 0 语句上设置断点并从那里逐步运行来使用调试器逐步执行代码时会发生什么?您应该能够看到它的作用。如果行数仅为 1 或文件存在则返回 false 等...
-
阅读您对 adatapost 他/她的建议的评论我现在明白它在本地工作正常,但在服务器上却不行。这表明问题不在您的代码逻辑中。而是在本地和服务器配置之间有所不同。请检查本地和服务器上的 http 响应。包括标题并比较这两者。
-
对不起,我不够清楚。我的测试情况是我有三个标记为下载的文件(确认查询返回这个)。我的循环在这里只返回一个文件而不是它应该返回的三个文件。谢谢 - 詹姆斯
-
循环似乎很好。这个问题是在两个位置都出现还是只在远程位置出现?
-
就在服务器上。这将在本地返回所有三个文件。我可以知道,因为返回的文件列表在下载器中可见。我在本地获取所有三个文件,并且只在服务器上获取第一个文件。文件和目录是相同的,当然服务器路径不同。奇怪的是为什么第一个文件有效,而其他文件无效。