1. 程式人生 > >讓ie瀏覽器下載word,excel,而不是直接開啟

讓ie瀏覽器下載word,excel,而不是直接開啟

  <%
Response.ContentType = "application/octet-stream "
Response.AddHeader "Content-Disposition ", "attachment; filename=xx.Excel "
response.binarywrite getBinaryFile( "c:/xxxxx/xx.Excel ")
function getBinaryFile(fileSpec)
Dim adTypeBinary
adTypeBinary = 1
Dim oStream
set oStream = server.createobject( "ADODB.Stream ")
oStream.Open
oStream.Type = adTypeBinary
oStream.LoadFromFile fileSpec
getBinaryFile= oStream.read
set oStream=nothing
end function
%>
  方法二:直接讓客戶端瀏覽器下載已知型別的檔案
Web開發人員都有過這樣的疑問,如何讓一個檔案,尤其是一個已知型別的檔案,傳送到客戶端,直接提示讓瀏覽者下載,而不是用與它相關聯的程式開啟。以前我們最常用的辦法就是把這樣的檔案加到連結上,這樣可以讓瀏覽者通過點選滑鼠右鍵的目標另存為來下載所連結的檔案。但是,這樣有兩個不足的地方:
一是:如果瀏覽器能夠識別已下載檔案的副檔名,則瀏覽器就會啟用該副檔名所關聯的程式來開啟所下載的檔案。比如:在Windows平臺上,如果使用者點選的連結連結的是一個“.doc”檔案的話,那麼,瀏覽器就會啟動Microsoft Word應用程式來開啟它。
二是:如果採用連結的辦法的話,任何能看到該連結的人都可以下載該檔案,你雖然也可以對所下載的檔案進行許可權設定,但那樣做也不是很方便的。有時候我們需要更為靈活和富有彈性的方式,下面的程式能夠很方便地克服以上兩方面的不足。
這種辦法是可靠的,但你必須記住:沒有授權的使用者不能夠通過在瀏覽器位址列裡輸入檔案的URL來取得該檔案的下載權。所以,要下載的檔案應該放到虛擬目錄之外的一個目錄裡,比如:如果你的虛擬目錄是C:/Mengxianhui/Tomcat4/Website/MyApp的話,那麼,存放在該目錄和該目錄下的任何子目錄下所有檔案對因特網上的任何使用者都是可見的。要直接下載一個檔案,我們需要做兩件事,第一件事是:設定響應的內容類為“application/octet-stream”,大小寫無關。第二件事是:設定HTTP的響應頭名字為:Content-Disposition,設定值為:attachment; filename = theFileName。這裡的theFileName就是出現在檔案下載對話方塊裡的預設檔名,通常和所下載的檔名字相同,但也可以不同。下面,我們就平常最常用的JSP和ASP頁面來舉一個實際應用的例子。
TestFileDownload.JSP頁面的例子:
<%
// 得到檔名字和路徑
String filename = "MengxianhuiDocTest.doc ";
String filepath = "D:// ";

// 設定響應頭和下載儲存的檔名
response.setContentType( "APPLICATION/OCTET-STREAM ");
response.setHeader( "Content-Disposition ",
"attachment; filename=/ " " + filename + "/ " ");

// 開啟指定檔案的流資訊
java.io.FileInputStream fileInputStream =
new java.io.FileInputStream(filepath + filename);

// 寫出流資訊
int i;
while ((i=fileInputStream.read()) != -1) {
out.write(i);
}
fileInputStream.close();
out.close();
%>
值得注意的是:在要下載的檔案內容裡,除了檔案的內容之外,不應該再附加有其它任何的字元,包括空格和回車換行符。我們有時在編寫程式碼的時候,為了使程式碼清晰可讀,往往會新增一些空格、製表符或者回車換行符,這樣雖然看起來比較清晰,但有時可能會得不到正確的結果。比如:
<%@ page import= "java.io.* "
%> <jsp:useBean id= "MyBeanFromMengxianhui " scope= "page "
class= "com.Mengxianhui.DownloadBean " />
應該寫成這樣:
<%@ page import= "java.io.* "
%> <jsp:useBean id= "MyBeanFromMengxianhui " scope= "page "
class= "com.Mengxianhui.DownloadBean " />
TestFileDownload.ASP頁面的例子:
在ASP裡,沒有提供從檔案讀取檔案流資訊的方法,因此,為了得到檔案的流資訊,我們必須藉助其他的工具,最簡單的就是編寫一個VB或C的DLL元件,讓元件返回檔案的流資訊。下面是一個用VB編寫的DLL的例子,工程名字為MengXHFileDownLoad,類模組的名字為BinReadFromFile,類方法readBinFromFile如下:
Function readBinFromFile(ByVal bfilename As String) As Variant
Dim fl As Long
Dim FileNum As Long
Dim binbyte() As Byte
Dim binfilestr As String
On Error GoTo errHandler
FileNum = FreeFile
Open bfilename For Binary As #FileNum
fl = FileLen(bfilename)
ReDim binbyte(fl)
Get #FileNum, , binbyte
Close #FileNum
readBinFromFile = binbyte
Exit Function
errHandler:
Exit Function
End Function
把上面的程式碼編譯成MengXHFileDownLoad.DLL,然後註冊即可使用。下面以直接下載一個When A Man Loves A Woman.mp3的MP3檔案為例子,我們要編寫的ASP指令碼程式碼如下:
<%@ Language=VBScript %>
<%
Response.buffer = TRUE
Response.ContentType = "APPLICATION/OCTET-STREAM "
Response.AddHeader "Content-Disposition ", "attachment;filename=When A Man Loves A Woman.mp3 "
Dim varStream, oMyObject
Set oMyObject = Server.CreateObject( "MengXHFileDownLoad.BinReadFromFile ")
varStream = oMyObject.readBinFromFile( "E:/MengXianhui/Mp3/When A Man Loves A Woman.mp3 ")
Response.BinaryWrite(varStream)
Set oMyObject = Nothing

Response.End
%>

當執行上面的TestFileDownload.ASP檔案時,瀏覽器會彈出一個檔案下載的對話方塊,提示我們下載,而不是用預設的MP3播放器開啟。
這種方法也可以把我們的ASP頁面生成的HTML原始碼儲存成一個檔案,下面的程式碼會提示你把ASP執行的結果儲存成Test.htm檔案。具體的方法是:
<%
Response.ContentType = "APPLICATION/OCTET-STREAM "
Response.AddHeader "Content-Disposition ", "attachment;filename=Test.htm "
Response.write " <div style= 'background-color:navy;color:#FFFFFF '> 測試 </div> "
Response.write " <a href= '
http://lucky.myrice.com
'> "
Response.write " <img src= 'http://lucky.myrice.com/back.jpg '> 【孟憲會之精彩世界】 </a> "
Response.End
%>

當檔案數目很少時,也可以直接在伺服器端進行設定,讓這些檔案直接下載。具體做法是:在Internet服務管理器裡,選“屬性”項,然後選“HTTP Headers”標籤頁進行設定即可!!

  方法三:用JS直接操作
function DownURL(strRemoteURL,strLocalURL)
{
try
{
var xmlHTTP=new ActiveXObject( "Microsoft.XMLHTTP ");
xmlHTTP.open( "Get ",strRemoteURL,false);
xmlHTTP.send();
var adodbStream=new ActiveXObject( "ADODB.Stream ");
adodbStream.Type=1;//1=adTypeBinary
adodbStream.Open();
adodbStream.write(xmlHTTP.responseBody);
adodbStream.SaveToFile(strLocalURL,2);
adodbStream.Close();
adodbStream=null;
xmlHTTP=null;
//OpenFile(strLocalURL);
}
catch(e)
{
window.confirm( "下載URL出錯! ");
}
//window.confirm( "下載完成. ");
}

相關推薦

ie瀏覽器下載word,excel,直接開啟

  <% Response.ContentType = "application/octet-stream " Response.AddHeader "Content-Disposition ", "attachment; filename=xx.Excel " response.binarywrite

瀏覽器下載word.excel

/** * * @param filePath 路徑含檔案字尾//檔案完整路徑(包括檔名和副檔名) * @param name 下載後的名字 * @param response * @return * @throws IOExcepti

php下載檔案(開啟檔案)

public function down() { header('content-type:application:json;charset=utf8'); h

ie瀏覽器下載入口網站的excel文件出現亂碼現象的解決辦法

1.有時候我們部署的網站的相關下載連結通過ie瀏覽器下載xls文件開啟會出現亂碼現象。2.解決方法:  2.1 在部署包web.xml文件中加入如下配置:<!-- ie xls檔案直接開啟亂碼 -->    <mime-mapping>        

"Chrome瀏覽器下載WordExcel、PPT,開啟提示錯誤"問題

       子豐最近剛開始使用chrome瀏覽器,但是從網頁、文庫或者郵件等地方下載Word、Excel和PPT後,開啟總是提示錯誤。        Word和Excel還是可以開啟看裡面的內容,只

如何使 pdf 檔案在瀏覽器裡面直接下載開啟

## 前言 在做需求過程中我們大概率會遇到在瀏覽器中下載檔案的需求,如果僅僅是這個要求的話很簡單,有如下兩種解決方式。 第一種是通過 window 物件的 open 方法進行操作,將檔案 url 直接在瀏覽器中開啟即可下載。 ```javascript window.open('url') ``` 第

【學習】jquery.placeholder.jsIE瀏覽器支持html5的placeholder

jquery HERE zha username 瀏覽器 http ie瀏覽器 rdp 實際應用 原文鏈接:https://www.cnblogs.com/xiaoxianweb/p/5692301.html type為text或password的input,其在實際應用時

Java Web匯出excel表,瀏覽器下載匯出excel

1 自定義註解 @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface ExcelTable { String value() default ""; }

java設定檔案強制下載開啟

//·設定響應訊息頭,告訴瀏覽器當前響應是一個下載檔案 response.setContentType( "application/x-msdownload"); //告訴瀏覽器,當前響應資料要求使用者干預儲存到檔案中,以及檔名是什麼response.setHeader(

IE瀏覽器下載檔案中文檔名亂碼問題解決

在web開發工作當中,瀏覽器相容性問題總是會引來一大波前端攻城獅們的瘋狂吐槽,尤其是IE瀏覽器更是一個神一般的存在,總是讓人頭疼不已。 前段時間用java在做一個檔案上傳下載功能時,發現部分IE瀏覽器上下載中文檔名檔案時會出現檔名亂碼的現象。經過檢視之前

ie瀏覽器下載檔案亂碼解決

String userAgent = requst.getHeader("user-agent").toLowerCase(); if (userAgent.contains("msie") ||

CentOS系統中只下載RPM包進行安裝的方法

通常是使用yum來安裝解決依賴包關係,如果有一臺伺服器沒法連線外網或yum源沒有設定,希望通過另一臺伺服器將這些RPM包下載下來,然後再去安裝。那麼怎麼使用yum工具來下載RPM包呢?1.安裝downloadonly--downloadonlyyum-plugin-downl

js 下載pdf檔案,開啟預覽 方案

專案需求 常規加上download 屬性 <a href="https://testmv.xesimg.com/ExpCourse/image/2018/10/09/15390717545791

jsp下載文字開啟

最近好幾個哥們問這個問題,寫在這裡備查吧。 <% response.setContentType("application/octet-stream"); response.addHeader("Content-Disposition","attachment; fil

centOS下用yum只下載rpm包安裝

CentOS用yum安裝軟體是非常方便的,有時,我們只需要下載其中的rpm包,而不直接安裝時咋辦呢? 一般情況下,yum是不提供只下載的功能的。 yum install後的下載檔案存放在哪? 一般情況下,yum install安裝軟體後rpm包存放在/var/cach

HTML5-JS檔案-IE瀏覽器支援HTML5標準

  自HTML5標準的提出就得到非常多的關注,而作為全球使用使用者最多的IE瀏覽器能夠支援HTML5標準也是大家備受關注一個問題,讓IE(包括IE6)支援HTML5元素,我們需要在HTML頭部新增以下JavaScript,這是一個簡單的document.createElement宣告,利用條件註釋針對IE來

Windows通過IE瀏覽器訪問FTP資源時間一致

一、時間相差8小時 vsftp安裝的時候預設使用GMT時間,修改vsftp配置檔案使用本地時間即可 use_localtime=yes 二、檔案時間差一年 這個是微軟的BUG 當通過IE訪問FTP時,會把取得檔案的時間和GMT時間做比較,如果比GMT時間大就自動

mac pro 如何終端預設執行python3.X是2.7

1,首先開啟終端     open ~/.bash_profile    開啟配置檔案  2. 寫入python的外部環境變數(本人的版本是3.4)  export PATH=${PATH}:/Library/Frameworks/Python.framework/Vers

如何使用yum來下載RPM包進行安裝

yum是基於Red Hat的系統(如CentOS、Fedora、RHEl)上的預設包管理器。使用yum,你可以安裝或者更新一個RPM包,並且他會自動解決包依賴關係。但是如果你只想將一個RPM包下載到你的系統上該怎麼辦呢? 例如,你可能想要獲取一些RPM包在以後使用,或者將他們安裝在另外的機器上。 這裡說明了如

解決mxGraph放大/縮小在非IE瀏覽器下overlay圖示位置變化的問題

首先要建立一個工具欄,併為工具欄中的放大、縮小按鈕定義事件。 <div id="toolbar" style="float:left;margin-top:5px;margin-left: 5px;line-height: 35px;"> <i