關於JS訪問文件服務器的HTTP文件地址實現文件下載

    開發過程中遇到一個需求變動,主管要求網站在提供文件下載的時候不要使用 服務寫流的形式(out.write)進行文件下載。需要改造成將文件生成到 文件服務器路徑下,然後以http的形式直接進行文件訪問、下載。  我想這個訪問http地址顯示文件的方式,大家應該都回使用到,比如:需要加載遠程圖片時<img src = "http://...." />。而現在需要實現的是文件下載...

    (需求:下載文件類型爲PDF文件)

    剛開始還以爲直接使用 window.open()或者 <a href="" target="blank"><a/>就能夠輕鬆實現下載,說到這裏是不是很天真。

    上面這兩種方式貌似之後再返回的是壓縮包的情況下才會下載。而PDF使用這個方法360,google等瀏覽器中都回直接進行文件預覽。

   所以上面的兩種方法就被我排除了。


    於是我開始了百度,搜索了半天,發現有兩種解決方案:

一、使用第三方插件的形式,如:jQuery的插件jdownload,但是它是以彈出框提示信息的形式,需要客戶再點擊彈出框的下載按鈕後才能進行文件下載,------排除。

  二、使用iframe實現文件下載

具體實現方式:

        //觸發函數
        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

             根據這個錯誤提示我又開始尋找解決方案, 由於訪問圖片是根據tomcat服務器,我就想是不是tomcat服務器的mime-type缺少了application/pdf類型而導致的。然後我就找到了tomcat的web.xml文件,卻發現mime-type中有application/pdf這個類型。  又一次進入蒙圈的狀態····


    又開始找啊找,又找到了一種方式,html5爲 <a>標籤提供了一個download屬性,會將<a>標籤訪問路徑後的資源進行下載, download中填寫的是下載後的文件名。這個方法總算是解決了我的問題。 具體實現方式:

<a download="" href="" target="blank" id="downPdf"></a>

//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);
		}								
	});	

   爲了解決這個問題,我是繞了一圈又回到原點,說多了都是淚啊。  希望這個解決方案能夠幫助到大家。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章