我正在创建一个下载管理器,一切似乎都有效。但是我下载的文件无法打开。该文件具有正确的名称和扩展名.pdf - 但我的Mac说该文件无法打开(服务器上的文件正常工作)。
if request.querystring("downloadFile") <> "" then
strFilePath = Server.MapPath("/_customerFiles/"& session("URLmapping") &"/documents/"& request.querystring("downloadFile"))
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(strFilePath) Then
Set objFile = objFSO.GetFile(strFilePath)
intFileSize = objFile.Size
Set objFile = Nothing
strFileName = request.querystring("filename")
strFileName = replace(request.querystring("downloadFile")," ","-")
Response.AddHeader "Content-Disposition","attachment; filename=" & strFileName
Response.ContentType = "application/octet-stream"
Response.AddHeader "Content-Length", intFileSize
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = 1 'adTypeBinary '
objStream.LoadFromFile strFilePath
Do While Not objStream.EOS And Response.IsClientConnected
Response.BinaryWrite objStream.Read(1024)
Response.Flush()
Loop
objStream.Close
Set objStream = Nothing
End if
Set objFSO = Nothing
end if
答案 0 :(得分:0)
您是否认为输出流添加了(或可能已删除)字节顺序标记(BOM)?我会在十六进制编辑器中打开这两个文件,并查找在开始时添加的3个字节(以及其他所有内容)。
答案 1 :(得分:0)
我知道我迟到了这个问题,但我只是处理类似的事情,并希望分享我的意见,试图清理它。
ADODB.Stream
在调用.Type
之前必须指定.Open
.Mode
属性设置为3(意思是“打开文件进行读取”),以防止多个人同时尝试访问文件时出现文件访问锁定错误 - 也必须在之前完成致电.Open
Response.ContentType "application/octet-stream"
取得了不同的成功,在遇到一些问题后,我将我改为Response.ContentType "xxx/xxx"
。浏览器将其接受为未知文件类型,然后提示用户根据该文件扩展名的注册程序打开它。Response.Clear
(只是为了确保您没有发送额外的标记)FileSystemObject
后,您应致电Response.End
(再次确认)答案 2 :(得分:0)
您需要在Response.AddHeader之前添加Response.Clear并更改Response.ContentType,所以代码就像下面这样:
if request.querystring("downloadFile") <> "" then
strFilePath = Server.MapPath("/_customerFiles/"& session("URLmapping") &"/documents/"& request.querystring("downloadFile"))
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(strFilePath) Then
Set objFile = objFSO.GetFile(strFilePath)
intFileSize = objFile.Size
Set objFile = Nothing
strFileName = request.querystring("filename")
strFileName = replace(request.querystring("downloadFile")," ","-")
Response.Clear
Response.AddHeader "Content-Disposition","attachment; filename=" & strFileName
Response.ContentType = "xxx/xxx"
Response.AddHeader "Content-Length", intFileSize
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = 1 'adTypeBinary '
objStream.LoadFromFile strFilePath
Do While Not objStream.EOS And Response.IsClientConnected
Response.BinaryWrite objStream.Read(1024)
Response.Flush()
Loop
objStream.Close
Set objStream = Nothing
End if
Set objFSO = Nothing
End if