作者 主題: 請問下載檔案的ASP 程式  (閱讀 9752 次)

0 會員 與 1 訪客 正在閱讀本文。

湯包

  • 榮譽博士
  • 鑽研的研究生
  • *****
  • 文章數: 923
  • 性別: 男
    • 檢視個人資料
    • 湯包的部落格
請問下載檔案的ASP 程式
« 於: 2009-04-17 19:25 »
小弟在網路上搜尋到幾種下載已知類型檔案的ASP程式,但是實際使用卻是一直發生Internal Server Error
是否可以請各位先進指點一下,到底是哪裡有錯....:(

PS.因為客戶不想用 PHP,所以只好找大家幫幫忙...

代碼: (d1.asp) [選擇]
<% Language=VBScript
Response.Buffer = True
Dim strFilePath, strFileSize, strFileName
Const adTypeBinary = 1

' 從引數抓取File、Size、Name這三個參數
strFilePath = Request.QueryString("File")
strFileSize = Request.QueryString("Size")
' strFileName = Request.QueryString("Name")
strFileName = strFilePath

Response.Clear

Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = adTypeBinary
objStream.LoadFromFile server.mappath(strFilePath)

' 依副檔名來設定 Content Type
strFileType = lcase(Right(strFileName, 4)) ' 抓取檔名從右邊數來四碼,也就是副檔名的部份
Select Case strFileType
Case ".asf"
ContentType = "video/x-ms-asf"
Case ".avi"
ContentType = "video/avi"
Case ".doc"
ContentType = "application/msword"
Case ".zip"
ContentType = "application/zip"
Case ".xls"
ContentType = "application/vnd.ms-excel"
Case ".gif"
ContentType = "image/gif"
Case ".jpg", "jpeg"
ContentType = "image/jpeg"
Case ".wav"
ContentType = "audio/wav"
Case ".mp3"
ContentType = "audio/mpeg3"
Case ".mpg", "mpeg"
ContentType = "video/mpeg"
Case ".rtf"
ContentType = "application/rtf"
Case ".htm", "html"
ContentType = "text/html"
Case ".asp"
ContentType = "text/asp"
Case Else
ContentType = "application/octet-stream"
End Select

' 輸出 HTTP Header
Response.AddHeader "Content-Disposition", "attachment; filename=" & strFileName
Response.AddHeader "Content-Length", strFileSize
Response.Charset = "UTF-8"
Response.ContentType = ContentType
Response.BinaryWrite objStream.Read
Response.Flush
objStream.Close
Set objStream = Nothing
%>

代碼: (test.htm) [選擇]
<html>
<head>
<title></title>
</head>
<body>
<a href="d1.asp?File=dm.pdf">DM</a>
</body>
</html>

這個d1.asp還要考慮一些安全性問題,不過我現在連Run這個程式都沒辦法下載檔案

底下這個程式也是....唉,真的是沒有寫程式的天份
代碼: (d2.asp) [選擇]
  <%@ Language=VBScript %>
  <%
   Response.buffer = TRUE
   Response.ContentType = "APPLICATION/OCTET-STREAM"
   Response.AddHeader "Content-Disposition","attachment;filename=dm.pdf"
   
   Dim varStream, oMyObject
   
   Set oMyObject = Server.CreateObject("MengXHFileDownLoad.BinReadFromFile")
   varStream = oMyObject.readBinFromFile("dm.pdf")
   Response.BinaryWrite(varStream)
   Set oMyObject = Nothing
   
   Response.End
  %>
人必先置於死地而後生
科技來自人性
想像是科技之母

湯包

  • 榮譽博士
  • 鑽研的研究生
  • *****
  • 文章數: 923
  • 性別: 男
    • 檢視個人資料
    • 湯包的部落格
回覆: 請問下載檔案的ASP 程式
« 回覆 #1 於: 2009-04-19 19:04 »
真是詭異呀,在我XP上的IIS,可以正常Run這個程式,可是程式放到虛擬主機商的Windows Server IIS上,就沒辦法執行。

而且,我用IE 6、Opera 去瀏覽在我XP IIS上的程式,都可以正常下載檔案。
可是用IE7,去瀏覽相同的程式,存下來的檔案卻是 0 Bytes
人必先置於死地而後生
科技來自人性
想像是科技之母

TyroneYeh

  • 俺是博士!
  • *****
  • 文章數: 2396
  • 性別: 男
    • 檢視個人資料
回覆: 請問下載檔案的ASP 程式
« 回覆 #2 於: 2009-04-19 20:46 »
是不是虛擬主機商的 server 沒有 ADODB.Stream 元件呀!!
這要問虛擬主機商囉!!
--
TyroneYeh

湯包

  • 榮譽博士
  • 鑽研的研究生
  • *****
  • 文章數: 923
  • 性別: 男
    • 檢視個人資料
    • 湯包的部落格
回覆: 請問下載檔案的ASP 程式
« 回覆 #3 於: 2009-04-19 21:57 »
真是詭異呀,在我XP上的IIS,可以正常Run這個程式,可是程式放到虛擬主機商的Windows Server IIS上,就沒辦法執行。

而且,我用IE 6、Opera 去瀏覽在我XP IIS上的程式,都可以正常下載檔案。
可是用IE7,去瀏覽相同的程式,存下來的檔案卻是 0 Bytes

後來我發現我之前使用這支ASP程式時,沒有傳Size參數給它,IE 7就會存成 0 Bytes, IE 6 or Opera都可以正常運作
我把Size參數設上之後, IE 7就可以正常下載了。

至於您說Stream這個元件....不是Windows內建的嗎.... :P
還是說要裝什麼軟體才有?
人必先置於死地而後生
科技來自人性
想像是科技之母

TyroneYeh

  • 俺是博士!
  • *****
  • 文章數: 2396
  • 性別: 男
    • 檢視個人資料
回覆: 請問下載檔案的ASP 程式
« 回覆 #4 於: 2009-04-19 23:42 »
或者那空間不允許 Server.CreateObject
還是直接寫 CreateObject 可以?
沒試過都只是猜測啦!!
--
TyroneYeh

湯包

  • 榮譽博士
  • 鑽研的研究生
  • *****
  • 文章數: 923
  • 性別: 男
    • 檢視個人資料
    • 湯包的部落格
回覆: 請問下載檔案的ASP 程式
« 回覆 #5 於: 2009-04-21 09:06 »
昨晚狠下心把我的XP給 Format,改裝成Windows Server 2003,執行程式後才發現真正的錯誤訊息原因是
執行 ASP 頁導致回應緩衝區超出其設定限制
http://support.microsoft.com/kb/944886/zh-tw

這個問題在 IIS 6、7才有,Windows XP上的 IIS是5

確實我要下載的PDF檔超過4MB。

爬了一下文,都是教怎麼去放大Buffer,不知道各位學長有沒有其他可以不用放大Buffer的方法... :(
人必先置於死地而後生
科技來自人性
想像是科技之母

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
回覆: 請問下載檔案的ASP 程式
« 回覆 #6 於: 2009-04-21 09:15 »
壓縮切割成小檔案?

ASP有5,6年沒用, 不知有什麼新的功能
所以只想到用壓縮切割檔案的方式  :D

elleryq

  • 鑽研的研究生
  • *****
  • 文章數: 908
  • 性別: 男
    • 檢視個人資料
    • Thinking more...
回覆: 請問下載檔案的ASP 程式
« 回覆 #7 於: 2009-04-21 11:17 »
你提供的 KB 有提到說可以把 Response.Buffer 設為 false 看看...
Plan your work, then work your plan.
我的首頁:http://blog.elleryq.idv.tw
351899by http://counter.li.org

湯包

  • 榮譽博士
  • 鑽研的研究生
  • *****
  • 文章數: 923
  • 性別: 男
    • 檢視個人資料
    • 湯包的部落格
回覆: 請問下載檔案的ASP 程式
« 回覆 #8 於: 2009-04-21 16:23 »
是的,我在我家新裝的Windows 2003 上,將程式改程 False之後,可以正常執行了。

但是我上傳到HiNet,卻會回應「緩衝必須啟用」,改成True就可以正常執行

上傳到戰國策,又得改成 False....

真是無言呀....程式設計師不好玩...
人必先置於死地而後生
科技來自人性
想像是科技之母