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)文章
Java之Rsync并發(fā)遷移數(shù)據(jù)并校驗(yàn)詳解
這篇文章主要介紹了Java之Rsync并發(fā)遷移數(shù)據(jù)并校驗(yàn)詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08Java零基礎(chǔ)教程之Windows下安裝、啟動(dòng)Tomcat服務(wù)器方法圖解(免安裝版)
這篇文章主要介紹了Windows系統(tǒng)下安裝、啟動(dòng)、注冊(cè)服務(wù)、停止 Tomcat操作的所有方法,本文通過圖文并茂的方式給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2016-09-09Java實(shí)現(xiàn)json數(shù)據(jù)處理的常用腳本分享
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)json數(shù)據(jù)處理的常用腳本,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以學(xué)習(xí)一下2023-03-03spring security自定義認(rèn)證登錄的全過程記錄
這篇文章主要給大家介紹了關(guān)于spring security自定義認(rèn)證登錄的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12java使用Runtime執(zhí)行系統(tǒng)命令遇到的問題
這篇文章主要介紹了java使用Runtime執(zhí)行系統(tǒng)命令遇到的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11Java中數(shù)組的創(chuàng)建與傳參方法(學(xué)習(xí)小結(jié))
這篇文章主要介紹了Java中數(shù)組的創(chuàng)建與傳參方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-092020macOS Big Sur配置Java開發(fā)環(huán)境之jdk安裝過程
這篇文章主要介紹了2020macOS Big Sur配置Java開發(fā)環(huán)境之jdk安裝,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02List集合按某個(gè)屬性或者字段進(jìn)行分組的操作
這篇文章主要介紹了List集合按某個(gè)屬性或者字段進(jìn)行分組的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06