java、javascript實(shí)現(xiàn)附件下載示例
在web開發(fā)中,經(jīng)常需要開發(fā)“下載”這一模塊,以下給出一個(gè)簡單的例子。
在服務(wù)器端,使用java開發(fā):
@RequestMapping(value = "download.html", method = RequestMethod.GET)
public void download(String resourceid, HttpServletRequest request, HttpServletResponse response) {
response.setContentType("charset=UTF-8");
File file = new File(path);
response.setHeader("Content-Disposition", "attachment; filename=a");
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
OutputStream fos = null;
InputStream fis = null;
try {
fis = new FileInputStream(file.getAbsolutePath());
bis = new BufferedInputStream(fis);
fos = response.getOutputStream();
bos = new BufferedOutputStream(fos);
int bytesRead = 0;
byte[] buffer = new byte[5 * 1024];
while ((bytesRead = bis.read(buffer)) != -1) {
bos.write(buffer, 0, bytesRead);
}
bos.flush();
}catch(E e){
}finally {
try {
bis.close();
bos.close();
fos.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
當(dāng)我們?cè)谇岸苏?qǐng)求這個(gè)地址時(shí),服務(wù)器先找出文件,設(shè)置響應(yīng)頭,然后通過流輸出到瀏覽器端。
瀏覽器在頭中發(fā)現(xiàn)該響應(yīng)的主體是流文件,則自動(dòng)會(huì)調(diào)用另存為的窗口,讓用戶保存下載。
這里有個(gè)關(guān)鍵就是Content-Disposition這個(gè)頭屬性,Content-Disposition是MIME協(xié)議的擴(kuò)展,用于指示如何讓客戶端顯示附件的文件。
它可以設(shè)置為兩個(gè)值:
inline //在線打開
attachment //作為附件下載
這里我們?cè)O(shè)置的值為attachment,所以可以被識(shí)別為附件并下載。
上面講了如何寫服務(wù)器端,下面講前端如何請(qǐng)求。
前端請(qǐng)求有三種方式:
1.Form
<form action='download.html' method='post'> <input type='submit'/> </form>
2.iframe
var iframe = "<iframe style='display:none' src='download.html'></iframe>" body.append(iframe);
當(dāng)iframe被append到body中時(shí),會(huì)自動(dòng)請(qǐng)求下載鏈接。
3.open
window.open("download.html");
相關(guān)文章
使用BootStrap實(shí)現(xiàn)表格隔行變色及hover變色并在需要時(shí)出現(xiàn)滾動(dòng)條
這篇文章主要介紹了使用BootStrap實(shí)現(xiàn)表格隔行變色及hover變色并在需要時(shí)出現(xiàn)滾動(dòng)條效果,代碼簡單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-01-01
IE6-IE9使用JSON、table.innerHTML所引發(fā)的問題
這篇文章主要介紹了IE6-IE9使用JSON、table.innerHTML所引發(fā)的問題 ,需要的朋友可以參考下2015-12-12
JavaScript:void(0)用法及一些常見問題解決辦法
這篇文章主要介紹了javascript:void(0)在JavaScript中的用法,探討了其防止鏈接默認(rèn)行為的作用,提供了使用示例,并針對(duì)常見問題如與#的區(qū)別、事件綁定和鍵盤訪問進(jìn)行了講解,需要的朋友可以參考下2024-12-12
微信小程序?qū)崿F(xiàn)獲取手機(jī)號(hào)60s倒計(jì)時(shí)
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)獲取手機(jī)號(hào)60s倒計(jì)時(shí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
JavaScript對(duì)象訪問器的工作原理及使用方法
今天來聊一下JavaScript中的對(duì)象訪問器,JavaScript的主要功能之一是能夠定義對(duì)象,這些對(duì)象可以封裝屬性和方法,本文將深入探討 JavaScript 對(duì)象訪問器是什么、它是如何工作的以及使用對(duì)象訪問器的作用,需要的朋友可以參考下2024-06-06
IE6下javasc#ipt:void(0) 無效的解決方法
本篇文章主要是對(duì)IE6下javasc#ipt:void(0) 無效的解決方法進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-12-12
JS利用?clip-path?實(shí)現(xiàn)動(dòng)態(tài)區(qū)域裁剪功能
這篇文章主要介紹了JS利用?clip-path?實(shí)現(xiàn)動(dòng)態(tài)區(qū)域裁剪功能,文中主要通過使用 box-shadow 實(shí)現(xiàn),代碼簡單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12

