溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

JQuery 實(shí)現(xiàn)文件下載的常用方法分析

發(fā)布時(shí)間:2020-09-05 20:07:07 來(lái)源:腳本之家 閱讀:1115 作者:xuexuan_050848 欄目:web開(kāi)發(fā)

本文實(shí)例講述了JQuery 實(shí)現(xiàn)文件下載的常用方法。分享給大家供大家參考,具體如下:

GET方式

window.location.href = url;

POST方式

var url = "下載接口地址";
// 構(gòu)造隱藏的form表單
var $form = $("<form id='download' class='hidden' method='post'></form>");
$form.attr("url",url);
$(body).append($form);
// 添加提交參數(shù)
var $input1 = $("<input name='param1' type='text'></input>");
$input1.attr("value","參數(shù)值1");
$("#download").append($input1);
var $input2 = $("<input name='param2' type='text'></input>");
$input1.attr("value","參數(shù)值2");
$("#download").append($input2);
// 提交表單
$form.submit();

ajax為什么不能下載文件

JQuery 實(shí)現(xiàn)文件下載的常用方法分析

ajax支持的服務(wù)器返回?cái)?shù)據(jù)類型有:xml、json、script、html,其他類型(例如二進(jìn)制流)將被作為String返回,無(wú)法觸發(fā)瀏覽器的下載處理機(jī)制和程序。

// ajax將返回?cái)?shù)據(jù)轉(zhuǎn)換為string,再利用該string創(chuàng)建Blob對(duì)象,下載的文件無(wú)法正確打開(kāi),數(shù)據(jù)可能已經(jīng)被破壞
var blob = new Blob([data]);
//對(duì)于Blob對(duì)象,我們可以創(chuàng)建出一個(gè)URL來(lái)訪問(wèn)它。使用URL對(duì)象的createObjectURL方法。
var a = document.createElement('a');
a.download = 'data.doc';
a.href=window.URL.createObjectURL(blob);
a.click()

HTML5 Blob對(duì)象

一直以來(lái),JS都沒(méi)有比較好的可以直接處理二進(jìn)制的方法。而B(niǎo)lob的存在,允許我們可以通過(guò)JS直接操作二進(jìn)制數(shù)據(jù)。Blob對(duì)象可以看做是存放二進(jìn)制數(shù)據(jù)的容器。

創(chuàng)建Blob對(duì)象

var blob = new Blob(dataArr:Array<any>, opt:{type:string,endings:string});

  • dataArr:數(shù)組,包含了要添加到Blob對(duì)象中的數(shù)據(jù)。數(shù)據(jù)可以是任意多個(gè)ArrayBuffer,ArrayBufferView, Blob,或者 DOMString對(duì)象。
  • opt:對(duì)象,包含兩個(gè)屬性
    • type:用于設(shè)置Blob對(duì)象的屬性(如:MIME類型)
    • endings :(已廢棄),設(shè)置BlobBuilder.append() 方法的endings參數(shù),取值"transparent"或"native"
// 例如創(chuàng)建一個(gè)裝填DOMString對(duì)象的Blob對(duì)象
var data='<b >Blob</b>';  
var blob=new Blob([data],{"type":"text/html"});  
console.log(blob); 

xmlhttprequest 2 + Blob 實(shí)現(xiàn)文件下載

xmlhttprequest 2 標(biāo)準(zhǔn)支持流文件,使用 xhr.response作為返回(不是responseText)

var url = "";
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);//get請(qǐng)求,請(qǐng)求地址,是否異步
xhr.responseType = "blob";  // 返回類型blob
xhr.onload = function () {// 請(qǐng)求完成處理函數(shù)
 if (this.status === 200) {
 var blob = this.response;// 獲取返回值
 var a = document.createElement('a');
 a.download = 'data.doc';
 a.href=window.URL.createObjectURL(blob);
 a.click();
  }
};
// 發(fā)送ajax請(qǐng)求
xhr.send();

更多關(guān)于jQuery相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《jQuery頁(yè)面元素操作技巧匯總》、《jQuery常見(jiàn)事件用法與技巧總結(jié)》、《jQuery常用插件及用法總結(jié)》、《jQuery擴(kuò)展技巧總結(jié)》及《jquery選擇器用法總結(jié)》

希望本文所述對(duì)大家jQuery程序設(shè)計(jì)有所幫助。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI