java如何從linux服務器下載文件
最近做項目,使用的技術(shù)較老,前端用的架構(gòu)是jsp,主要技術(shù)是jquery、js、css、html等,后端用到的主要是springmvc、存儲過程等。
下面是一個文件下載的簡單實現(xiàn)。主要是客戶在瀏覽器點擊一個pdf文件,進行下載。改文件存在于公司的服務器上。
一、前端代碼
1、html代碼
<div class="border-gb-title">項目文件</div>
<div class="grey-card jus-c ptb30 flex">
<div class="tc mlr50 cupointer" onclick="getProjectFiles(1)"><img src="/res/images/file.png">
<div class="mt5 fs16">合同</div>
</div>
<div class="tc mlr50 cupointer" onclick="getProjectFiles(2)"><img src="/res/images/file.png">
<div class="mt5 fs16">計劃說明書</div>
</div>
<div class="tc mlr50 cupointer" onclick="getProjectFiles(3)"><img src="/res/images/file.png">
<div class="mt5 fs16">風險說明書</div>
</div>
<div class="tc mlr50 cupointer" onclick="getProjectFiles(6)"><img src="/res/images/file.png">
<div class="mt5 fs16">服務協(xié)議</div>
</div>
</div>
2、js代碼
//獲取文件,主要是從數(shù)據(jù)庫獲取到:文件名、文件路徑
function getProjectFiles(type) {
var fileParam = {
pageNo: 1,
pageSize: 10,
xmId: ${detail[0]["項目ID"]},
cxlx: type,
};
$.ajax({
url: "/prod/getProjectFiles",
type: "POST",
data: fileParam,
dataType: "JSON",
success: function (ret) {
if (ret && ret['code'] > 0) {
debugger
//渲染界面
var dataList = ret['list'];
download(dataList[0]["附件名"],dataList[0]["附件路徑"]);
}
}
})
}
//下載文件,調(diào)用后端接口
function download(fileName,filePath){
window.open("/downloadTwo?fileName="+encodeURI(fileName)+"&downUrl="+filePath);
return ;
}
3、css樣式
前端的所有樣式都是使用layui架構(gòu)的。
二、后臺代碼
1、獲取文件
主要是,調(diào)用存儲過程,去數(shù)據(jù)庫獲取文件名和文件路徑,后面用于下載。
/**
* 獲取項目文件
* I_CXLX IN NUMBER, --查詢類型 1|信托合同 2|信托計劃說明書3|認購風險說明書 5|隱私協(xié)議|6用戶服務協(xié)議
* I_XSXM IN NUMBER --發(fā)行方案id
* @param request
* @param response
* @param modelMap
* @return
*/
@RequestMapping(value = "/getProjectFiles",method = RequestMethod.POST)
@ResponseBody
public DataResultSet getProjectFiles(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap){
int pageNo = ParamUtils.getInt(request, "pageNo", 1); // 頁碼
int pageSize = ParamUtils.getInt(request, "pageSize", 10); // 取得顯示條數(shù)
String cxlx = ParamUtils.getString(request, "cxlx", ""); // 查查詢類型 1|信托合同 2|信托計劃說明書3|認購風險說明書 5|隱私協(xié)議|6用戶服務協(xié)議
String xmId = ParamUtils.getString(request, "xmId", ""); //發(fā)行方案id
DataResultSet productHistory = prodService.getProjectFiles(pageNo,pageSize,cxlx,xmId);
return productHistory;
}
2、開始下載
/**
* 附件下載
*
* @param request
* @param response
*/
@RequestMapping("/downloadTwo")
public void downloadFileTwo( HttpServletRequest request, HttpServletResponse response) {
String fileName = request.getParameter("fileName");
String downUrl = request.getParameter("downUrl");
goToDownload(request, response, downUrl, fileName);
}
/**
* 下載
*
* @param request
* @param response
* @param downUrl 下載的路徑
* @param fjmc 下載文件的名稱
*/
private void goToDownload(HttpServletRequest request, HttpServletResponse response, String downUrl, String fjmc) {
response.setCharacterEncoding("UTF-8");
response.setContentType("application/x-msdownload");
try {
String encodenickname = URLEncoder.encode(fjmc,"UTF-8");//轉(zhuǎn)Unicode不然ie會亂碼
response.setHeader("Content-Disposition", "attachment;fileName=" + new String(encodenickname.getBytes("UTF-8"), "ISO8859-1"));
//這里注掉的代碼是本地測試的
// String path = request.getSession().getServletContext().getRealPath("/");
// String ATTACH_PATH= AppConfig.getInstance().getProperty("attach.base","");
// if (StringUtils.isNotEmpty(ATTACH_PATH)) {
// path = ATTACH_PATH;
// }
// logger.debug("=path===" + path);
File file = new File( downUrl);
if (!file.exists()) {
response.sendError(404, "File not found!");
return;
}
long fileLength = file.length();
response.setHeader("Content-Length", String.valueOf(fileLength));
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[2048];
int bytesRead;
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
bis.close();
bos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
三、效果

直接點擊文件圖片或者文件,就可以下載。

上面測試,是在谷歌瀏覽器,火狐,IE也測試過了,親測有效。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Boot整合JPA使用多個數(shù)據(jù)源的方法步驟
這篇文章主要給大家介紹了關(guān)于Spring Boot整合JPA使用多個數(shù)據(jù)源的方法步驟,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Spring Boot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-08-08
Springboot Cache @CacheEvict 無法模糊刪除的解決方案
這篇文章主要介紹了Springboot Cache @CacheEvict 無法模糊刪除的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
Spring Boot集成Swagger2項目實戰(zhàn)
在日常的工作中,我們往往需要給前端(WEB端、IOS、Android)或者第三方提供接口,這個時候我們就需要給他們提供一份詳細的API說明文檔。這篇文章我們就來分享一種API文檔維護的方式,即通過Swagger來自動生成Restuful API文檔2018-01-01
解決執(zhí)行Junit單元測試報錯java.lang.ClassNotFoundException問題
這篇文章主要介紹了解決執(zhí)行Junit單元測試報錯java.lang.ClassNotFoundException問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
解決Unable to start embedded container&nbs
這篇文章主要介紹了解決Unable to start embedded container SpringBoot啟動報錯問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
詳解關(guān)于Windows10 Java環(huán)境變量配置問題的解決辦法
這篇文章主要介紹了關(guān)于Windows10 Java環(huán)境變量配置問題的解決辦法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-03-03
簡單了解JAVA SimpleDateFormat yyyy和YYYY的區(qū)別
這篇文章主要介紹了簡單了解JAVA SimpleDateFormat yyyy和YYYY的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03

