Ajax請求無法下載檔案的原因

來源:互聯網
上載者:User

原因

ajax的傳回值類型是json,text,html,xml類型,或者可以說ajax的接收類型只能是string字串,不是流類型,所以無法實現檔案下載。但用ajax仍然可以獲得檔案的內容,該檔案將被保留在記憶體中,無法將檔案儲存到磁碟。這是因為JavaScript無法和磁碟進行互動,否則這會是一個嚴重的安全問題,js無法調用到瀏覽器的下載處理機制和程式,會被瀏覽器阻塞。 實現下載的方法 隱藏表單,用提交表單的形式 用window.open() 或 window.location.href() 建立iframe,iframe的src可以是檔案地址url來直接下載檔案

下載時注意要設定contentType,content-disposition 
response. setHeader(“content-disposition”, “attachment; filename=123.doc”); 
response.setContentType("application/msword");


1.使用ajax,ajax的傳回值類型是json,text,html,xml類型,或者可以說ajax的發送,接受都只能是string字串,不能流類型,所以無法實現檔案下載,強用會出現response衝突。

如果非要使用ajax的話,只能通過傳回值得到產生的檔案相關url。然後在回呼函數裡通過建立一個iframe,並設定其src值為檔案url,或者一個對檔案產生流的處理url,這樣操作來實現檔案下載且頁面無重新整理。

 

2.不使用ajax,通過dom動態操作或建立iframe,form的方式來實現,在下載檔案的同時實現頁面不重新整理,其中iframe的src可以是檔案地址url來直接下載檔案,也可以是流處理url通過response流輸出下載,form的是流處理url通過response流輸出下載,dom動態操作的時候實現檔案下載,且頁面無重新整理。

 

要在下載的同時實現進度條的話,可以建立一個定時任務,每隔一定時間就向後台發送請求,通過公用的對象,比如session,來取得檔案下載的處理進度。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.