javaweb 實(shí)現(xiàn)文件下載的方法及實(shí)例代碼
javaweb 實(shí)現(xiàn)文件下載
不要再說用<a>標(biāo)簽下載了,這個(gè)會(huì)把文件打開而不是下載
例如:
<a href="E:\MyDesktop\37fecd65330184de67d419a8d02e7081.jpg">下載</a>
如果我這樣寫,瀏覽器就會(huì)把圖片直接打開,除非是一個(gè)瀏覽器打不開的文件
所以我們還是要用到j(luò)ava本身的文件讀寫來進(jìn)行文件的下載
<a href="downloadFile?filename=<s:property value='document_filename'/>">下載</a>
package com.cpsec.tang.chemical.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;
import java.util.Random;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.springframework.stereotype.Controller;
import com.cpsec.tang.chemical.biz.DocumentBiz;
import com.cpsec.tang.chemical.entity.Document;
import com.cpsec.tang.chemical.util.Pager;
import com.opensymphony.xwork2.ActionSupport;
@Controller("documentAction")
public class DocumentAction extends ActionSupport{private String filename;
public String downloadFile(){
System.out.println(filename);
try {
HttpServletResponse response=ServletActionContext.getResponse();
//設(shè)置文件MIME類型
response.setContentType(ServletActionContext.getServletContext().getMimeType(filename));
//設(shè)置Content-Disposition
response.setHeader("Content-Disposition", "attachment;filename="+filename);
//獲取目標(biāo)文件的絕對(duì)路徑
String fullFileName = ServletActionContext.getServletContext().getRealPath("/files/" + filename);
//System.out.println(fullFileName);
//讀取文件
InputStream in = new FileInputStream(fullFileName);
//讀取目標(biāo)文件,通過response將目標(biāo)文件寫到客戶端
OutputStream out = response.getOutputStream();
//寫文件
int b;
while((b=in.read())!= -1)
{
out.write(b);
}
in.close();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
return SUCCESS;
}
}
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
關(guān)于MyBatis Plus中使用or和and問題
這篇文章主要介紹了關(guān)于MyBatis Plus中使用or和and問題,需要的朋友可以參考下2020-12-12
Java?Mybatis的初始化之Mapper.xml映射文件的詳解
這篇文章主要介紹了Java?Mybatis的初始化之Mapper.xml映射文件的詳解,解析完全局配置文件后接下來就是解析Mapper文件了,它是通過XMLMapperBuilder來進(jìn)行解析的2022-08-08
Java中Stream流中map和forEach的區(qū)別詳解
本文主要介紹了Java中Stream流中map和forEach的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
詳解OAuth2 Token 一定要放在請(qǐng)求頭中嗎
這篇文章主要介紹了詳解OAuth2 Token 一定要放在請(qǐng)求頭中嗎,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
java開發(fā)RocketMQ之NameServer路由管理源碼分析
這篇文章主要為大家介紹了java開發(fā)中RocketMQ之NameServer路由管理源碼分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2021-11-11
使用spring框架ResponseEntity實(shí)現(xiàn)文件下載
這篇文章主要介紹了使用spring框架ResponseEntity實(shí)現(xiàn)文件下載,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
Open-Feign整合hystrix降級(jí)熔斷實(shí)戰(zhàn)記錄
這篇文章主要介紹了Open-Feign整合hystrix降級(jí)熔斷實(shí)戰(zhàn)記錄,本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09

