開發(fā)過程中遇到一個需求變動,主管要求網(wǎng)站在提供文件下載的時候不要使用 服務寫流的形式(out.write)進行文件下載。需要改造成將文件生成到 文件服務器路徑下,然后以http的形式直接進行文件訪問、下載。 我想這個訪問http地址顯示文件的方式,大家應該都回使用到,比如:需要加載遠程圖片時。而現(xiàn)在需要實現(xiàn)的是文件下載...
(需求:下載文件類型為PDF文件)
剛開始還以為直接使用 window.open()或者 就能夠輕松實現(xiàn)下載,說到這里是不是很天真。
上面這兩種方式貌似之后再返回的是壓縮包的情況下才會下載。而PDF使用這個方法360,google等瀏覽器中都回直接進行文件預覽。
所以上面的兩種方法就被我排除了。
于是我開始了百度,搜索了半天,發(fā)現(xiàn)有兩種解決方案:
一、使用第三方插件的形式,如:jQuery的插件jdownload,但是它是以彈出框提示信息的形式,需要客戶再點擊彈出框的下載按鈕后才能進行文件下載,------排除。
二、使用iframe實現(xiàn)文件下載
具體實現(xiàn)方式:
[html] view plain copy
print?
//觸發(fā)函數(shù)
function downloadfile(url) {
var iframe = document.createElement("iframe");
iframe.src = url;
iframe.style.display = "none";
document.body.appendChild(iframe);
} 這種方式也有缺陷,只能IE瀏覽器才能進行下載,使用google瀏覽器時就報錯了,錯誤如下:
Resource interpreted as Document but transferred with MIME type application/pdf
根據(jù)這個錯誤提示我又開始尋找解決方案, 由于訪問圖片是根據(jù)tomcat服務器,我就想是不是tomcat服務器的mime-type缺少了application/pdf類型而導致的。然后我就找到了tomcat的web.xml文件,卻發(fā)現(xiàn)mime-type中有application/pdf這個類型。 又一次進入蒙圈的狀態(tài)····
又開始找啊找,又找到了一種方式,html5為 標簽提供了一個download屬性,會將標簽訪問路徑后的資源進行下載, download中填寫的是下載后的文件名。這個方法總算是解決了我的問題。 具體實現(xiàn)方式:
[html] view plain copy
print?
//js方法
$.post(url,{param1,param2},function(data){
if(data.code==0){
try{
var a = document.getElementById("downPdf");
a.href=data.url;
a.download=data.fileName;
a.click();
}catch(e){
}
}else{
alert(data.errorMsg);
}
});
為了解決這個問題,我是繞了一圈又回到原點,說多了都是淚啊。 希望這個解決方案能夠幫助到大家。