java文件上傳下載代碼實(shí)例
本文實(shí)例為大家分享了java文件上傳下載的具體代碼,供大家參考,具體內(nèi)容如下
文件上傳
@RequestMapping(value="/uploadFile",method=RequestMethod.POST)
public ResultObject uploadFiles(@RequestParam("file")MultipartFile file,HttpServletRequest request){
ResultObject rs = null;//返回上傳完成信息
String uploadDir = "files";//上傳目錄,文件保存在webapp下的files文件中
if(!file.isEmpty()) {
//可以對(duì)user做一些操作如存入數(shù)據(jù)庫
//以下的代碼是將文件file重新命名并存入Tomcat的webapp目錄下項(xiàng)目的下級(jí)目錄
String fileRealName = file.getOriginalFilename(); //獲得原始文件名;
/*int pointIndex = fileRealName.indexOf("."); //點(diǎn)號(hào)的位置
String fileSuffix = fileRealName.substring(pointIndex); //截取文件后綴
UUID FileId = UUID.randomUUID(); //生成文件的前綴包含連字符
String savedFileName = FileId.toString().replace("-", "").concat(fileSuffix); //文件存取名
*/
String savedDir = request.getSession().getServletContext().getRealPath(uploadDir); //獲取服務(wù)器指定文件存取路徑
File savedFile = new File(savedDir, fileRealName);
boolean isCreateSuccess;
try {
isCreateSuccess = savedFile.createNewFile();
if (isCreateSuccess) {
file.transferTo(savedFile); //轉(zhuǎn)存文件
rs = ResultObject.getSuccessResult("上傳文件成功");
Long size = file.getSize();//獲取文件大小
rs.setData(uploadDir+fileRealName);
}else{
rs = ResultObject.getFailResult("請(qǐng)修改文件名,重新上傳");
}
} catch (IOException e) {
e.printStackTrace();
}
}else{
rs = ResultObject.getFailResult("文件不能為空");
}
return rs;
}
文件下載
@RequestMapping(value = "/filterPermission/appDownLoad", method = RequestMethod.GET)
public void appDownLoad(HttpServletRequest request, HttpServletResponse response) {
//url是上面文件上傳的url
download(url,request,response);
}
public String download(String filePath, HttpServletRequest request, HttpServletResponse response) {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
//獲取文件名
String fileName = filePath.substring(filePath.lastIndexOf("/")+1);
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream");
//response.setContentType("application/force-download");
//處理下載彈出框名字的編碼問題
response.setHeader("Content-Disposition", "attachment;fileName="
+ new String( fileName.getBytes("gb2312"), "ISO8859-1" ));
//獲取文件的下載路徑
String path = request.getSession().getServletContext().getRealPath(filePath);
//利用輸入輸出流對(duì)文件進(jìn)行下載
InputStream inputStream = new FileInputStream(new File(path));
//設(shè)置文件大小
response.setHeader("Content-Length", String.valueOf(inputStream.available()));
bis = new BufferedInputStream(inputStream);//構(gòu)造讀取流
bos = new BufferedOutputStream(response.getOutputStream());//構(gòu)造輸出流
byte[] buff = new byte[1024];
int bytesRead;
//每次讀取緩存大小的流,寫到輸出流
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
response.flushBuffer();//將所有的讀取的流返回給客戶端
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try{
if(null != bis){
bis.close();
}
if(null != bos){
bos.close();
}
}catch(IOException e){
System.out.println("下載文件失敗,"+"文件路徑:"+filePath+e);
logger.error("文件下載失敗!", e);
}
}
// 返回值要注意,要不然就出現(xiàn)下面這句錯(cuò)誤!
//java+getOutputStream() has already been called for this response
return null;
}
以上所述是小編給大家介紹的java文件上傳下載詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
mybatis插入數(shù)據(jù)后返回自增主鍵ID的兩種實(shí)現(xiàn)方式
這篇文章主要介紹了mybatis插入數(shù)據(jù)后返回自增主鍵ID的兩種實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
Java編程Socket實(shí)現(xiàn)多個(gè)客戶端連接同一個(gè)服務(wù)端代碼
這篇文章主要介紹了Java編程Socket實(shí)現(xiàn)多個(gè)客戶端連接同一個(gè)服務(wù)端代碼,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11
java根據(jù)模板動(dòng)態(tài)生成PDF實(shí)例
本篇文章主要介紹了java根據(jù)模板動(dòng)態(tài)生成PDF實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04
hibernate一對(duì)多關(guān)聯(lián)映射學(xué)習(xí)小結(jié)
這篇文章主要介紹了hibernate一對(duì)多關(guān)聯(lián)映射學(xué)習(xí)小結(jié),需要的朋友可以參考下2017-09-09
使用java.util.Timer實(shí)現(xiàn)任務(wù)調(diào)度
這篇文章主要為大家詳細(xì)介紹了使用java.util.Timer實(shí)現(xiàn)任務(wù)調(diào)度,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
Java實(shí)現(xiàn)圖片翻轉(zhuǎn)以及任意角度旋轉(zhuǎn)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)圖片翻轉(zhuǎn)以及任意角度旋轉(zhuǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
JAVA 靜態(tài)代理模式詳解及實(shí)例應(yīng)用
這篇文章主要介紹了JAVA 靜態(tài)代理模式詳解及實(shí)例應(yīng)用的相關(guān)資料,這里舉例說明java 靜態(tài)代理模式該如何使用,幫助大家學(xué)習(xí)參考,需要的朋友可以參考下2016-11-11

