java web上傳文件和下載文件代碼片段分享
本文實(shí)例為大家分享了java web上傳文件和下載文件的具體代碼,供大家參考,具體內(nèi)容如下
/**
* Purpose:上傳文檔
*
* @param req
* @param fileTitle
* @param fileType
* @param fileDesc
* @return
*/
@RequestMapping("upload")
public ModelAndView upload(HttpServletRequest req, String fileType, String fileDesc, String share) {
UserAllInfo userAll = (UserAllInfo) req.getSession().getAttribute("userAll");
ModelAndView mav = new ModelAndView();
// 獲取文件的大小
String fileSize = "";
int length = req.getContentLength();
//轉(zhuǎn)換成KB
double len1 = (double) (Math.round((length / 1024) * 100)) / 100;
//轉(zhuǎn)換成MB
double len2 = (double) (Math.round((len1 / 1024) * 100)) / 100;
if (len2 > 1) {
fileSize = String.valueOf(len2) + "MB";
} else {
fileSize = String.valueOf(len1) + "KB";
}
//將請(qǐng)求轉(zhuǎn)換成處理文件的請(qǐng)求
MultipartRequest mreq = (MultipartRequest) req;
//文件上傳專用類
MultipartFile mfile = mreq.getFile("uploadFile");
// 得到上下文路徑
String root = req.getSession().getServletContext().getRealPath("/");
File dir = new File(root);
// 獲取文件名和文件的mime類型
String str = mfile.getOriginalFilename();
String[] st = str.split("\\.");
File savedFile = null;
try {
//在指定目錄中創(chuàng)建一個(gè)新的空文件,文件名稱加前綴"upload_"
savedFile = File.createTempFile("upload_", mfile.getOriginalFilename(), dir);
//將緩沖區(qū)的內(nèi)容復(fù)制到新創(chuàng)建的文件中
FileCopyUtils.copy(mfile.getInputStream(), new FileOutputStream(savedFile));
} catch (Exception e) {
e.printStackTrace();
}
String path = savedFile.getPath();
// 將文件的信息封裝在對(duì)象中
FileInfo file = new FileInfo();
if (userAll != null) {
file.setUploadPersonId(userAll.getUser().getUserId());
} else {
mav.setViewName("login");
return mav;
}
file.setFileName(st[0]);
file.setFilePath(path);
Date date = new Date();
file.setUploadDate(date);
file.setFileSize(fileSize);
file.setFileType(fileType);
file.setFileForm(st[1]);
if ("superman".equals(userAll.getUser().getUserNumber())) {
file.setFileShare("Y");
file.setCheckFlag("Y");
} else {
file.setFileShare(share);
file.setCheckFlag("N");
}
file.setDeleteFlag("N");
file.setDownloadTimes(0);
// 保存文件的信息
boolean bool = fileSer.saveFile(file);
String userNumber = userAll.getUser().getUserNumber();
//設(shè)置跳轉(zhuǎn)界面
mav.setViewName("jsp/person/upload");
logSer.saveLog("用戶\"" + userNumber + "\"上傳文件\"" + file.getFileName() + "\"");
mav.getModel().put("bool", bool);
return mav;
}
/**
* Purpose:下載文檔
*
* @param fileId 文件id
* @return
*/
@RequestMapping("download")
public void download(Integer fileId, HttpServletResponse resp) {
FileInfo file = new FileInfo();
//通過文件id獲取文件的基本信息
file = fileSer.getFileById(fileId);
// 根據(jù)文件后綴名設(shè)置文件的mime類型
String mime = "application/";
switch (file.getFileForm()) {
case "doc":
mime = mime + "msword";
break;
case "docx":
mime = mime + "msword";
break;
case "pdf":
mime = mime + "pdf";
break;
case "xls":
mime = mime + "vnd.ms-excel";
case "ppt":
mime = mime + "vnd.ms-powerpoint";
break;
case "txt":
mime = "text/plain";
break;
default:
break;
}
resp.setContentType(mime);
String fileName = file.getFileName();
String name = "";
try {
// 將文件名使用utf-8編碼格式編碼,使其中的中文字符可以正常顯示
name = URLEncoder.encode(fileName, "utf-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
// 彈框選擇保存路徑
resp.setHeader("content-disposition", "attachment;filename=" + name + "." + file.getFileForm()
+ ";filename*=utf-8''" + name + "." + file.getFileForm());
String filePath = file.getFilePath();
InputStream is = null;
OutputStream os = null;
try {
is = new BufferedInputStream(new FileInputStream(filePath));
os = new BufferedOutputStream(resp.getOutputStream());
byte[] buff = new byte[1024];
@SuppressWarnings("unused")
int count;
while ((count = is.read(buff)) != -1) {
os.write(buff);
}
//修改下載次數(shù)
fileSer.update(fileId);
} catch (Exception e) {
e.printStackTrace();
} finally {
//最后,要記得關(guān)閉輸入流和輸出流
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (os != null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Log4j關(guān)閉Spring和Hibernate日志打印方式
這篇文章主要介紹了Log4j關(guān)閉Spring和Hibernate日志打印方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
Spring Cloud @EnableFeignClients注解的屬性字段basePacka詳解
這篇文章主要介紹了Spring Cloud @EnableFeignClients注解的屬性字段basePacka詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
關(guān)于Java項(xiàng)目讀取resources資源文件路徑的那點(diǎn)事
這篇文章主要介紹了關(guān)于Java項(xiàng)目讀取resources資源文件路徑的那點(diǎn)事,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
SpringBoot使用@Cacheable注解實(shí)現(xiàn)緩存功能流程詳解
最近一直再學(xué)Spring Boot,在學(xué)習(xí)的過程中也有過很多疑問。為了解答自己的疑惑,也在網(wǎng)上查了一些資料,以下是對(duì)@Cacheable注解的一些理解2023-01-01
以Java代碼為例講解設(shè)計(jì)模式中的簡(jiǎn)單工廠模式
簡(jiǎn)單來說,工廠模式就是按照需求來返回一個(gè)類型的對(duì)象,使用工廠模式的意義就是,如果對(duì)象的實(shí)例化與代碼依賴太大的話,不方便進(jìn)行擴(kuò)展和維護(hù),使用工廠的目的就是使對(duì)象的實(shí)例化與主程序代碼就行解耦.來具體看一下:2016-05-05
Springboot開發(fā)之利用Docker和Kubernetes部署微服務(wù)
這篇文章主要介紹了如何將Spring Boot開發(fā)的微服務(wù)通過Docker容器化,并使用Kubernetes進(jìn)行部署和管理,幫助讀者掌握現(xiàn)代云原生應(yīng)用的完整開發(fā)部署流程,有需要的可以了解下2025-03-03
消息隊(duì)列 RabbitMQ 與 Spring 整合使用的實(shí)例代碼
本篇文章主要介紹了消息隊(duì)列 RabbitMQ 與 Spring 整合使用的實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08

