一、上传文件
1、使用 transferTo 上传
@ResponseBody @RequestMapping(value = "/file/upload") public ResultModel upload(@RequestParam MultipartFile file, HttpServletRequest request) { ResultModel resultModel = new ResultModel(); String fileName = file.getOriginalFilename(); String newFileName = IdUtil.uuid() + "_" + fileName; SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); String dateFolder = sdf.format(new Date()); //文件后缀名 String fileNameLower = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."),file.getOriginalFilename().length()).toLowerCase();//toLowerCase();//小写文件名 String staticFileType = ".jpg,.png,.txt,.doc,.zip,.mp4";//允许上传的类型格式 String uploadPath = "/usr/data/upload"; //服务器上传路径 if(staticFileType.indexOf(fileNameLower) != -1){ long len = file.getSize(); //上传文件大小 if(len <= 20971520) { if (file.isEmpty()) { return resultModel; } //上传文件 服务器路径 + 当前日期 例如:201900808 String fileUploadPath = uploadPath + "/"+dateFolder + "/"; File f = new File(fileUploadPath); if(!f.exists()){ f.mkdirs(); } String filePath = fileUploadPath + newFileName; File targetFile = new File(filePath); try { //将上传的文件写到服务器上指定的文件。 file.transferTo(targetFile); } catch (Exception e) { e.printStackTrace(); } //保存文件路径到数据库中 fileAttachService.insert(filePath, fileName); }else{ resultModel.setStatus(500); resultModel.setStatuMsg("文件大小不能超过20M!"); //文件大小不能超过20M return resultModel; } }else{ resultModel.setStatus(500); resultModel.setStatuMsg("文件后缀名不符合规范!"); //文件后缀名不符合规范 return resultModel; } return resultModel; }
2.使用 org.springframework.util.FileCopyUtils.copy()
import org.springframework.util.FileCopyUtils; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.io.InputStream; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; public class UploadFilesController { @ResponseBody @RequestMapping(value = "/file/upload") public ResultModel upload(@RequestParam MultipartFile file, HttpServletRequest request) { ResultModel resultModel = new ResultModel(); String fileName = file.getOriginalFilename(); String newFileName = IdUtil.uuid() + "_" + fileName; SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); String dateFolder = sdf.format(new Date()); //文件后缀名 String fileNameLower = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."),file.getOriginalFilename().length()).toLowerCase();//toLowerCase();//小写文件名 String staticFileType = ".jpg,.png,.txt,.doc,.zip,.mp4";//允许上传的类型格式 String uploadPath = "/usr/data/upload"; //服务器上传路径 if(staticFileType.indexOf(fileNameLower) != -1){ long len = file.getSize(); //上传文件大小 if(len <= 20971520) { if (file.isEmpty()) { return resultModel; } //上传文件 服务器路径 + 当前日期 例如:201900808 String filePath = uploadPath + "/"+dateFolder + "/" ; File saveFile = new File(filePath,newFileName); try { if(!saveFile.exists()){ saveFile.createNewFile(); } FileCopyUtils.copy(file.getInputStream(), new FileOutputStream(saveFile)); } catch (IOException e) { e.printStackTrace(); } //保存文件路径到数据库中 fileAttachService.insert(filePath, fileName); }else{ resultModel.setStatus(500); resultModel.setStatuMsg("文件大小不能超过20M!"); //文件大小不能超过20M return resultModel; } }else{ resultModel.setStatus(500); resultModel.setStatuMsg("文件后缀名不符合规范!"); //文件后缀名不符合规范 return resultModel; } return resultModel; } }
二、下载文件
import org.apache.commons.io.IOUtils; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import java.io.*; public class UploadFilesController { @RequestMapping(value = "/file/download/{fileId}") public void download(@PathVariable("fileId") String fileId, HttpServletRequest request, HttpServletResponse response) { FileAttach fileAttach = fileAttachService.selectById(fileId); File file = new File(fileAttach.getFilePath()); InputStream in = null; OutputStream os = null; try { //String fileName = URLEncoder.encode(fileAttach.getFileName(), "UTF-8").replaceAll("\+", "%20"); String fileName = new String(fileAttach.getFileName().getBytes("gb2312"), "ISO8859-1");//解决中文名乱码 response.setCharacterEncoding("utf-8"); response.setContentType("multipart/form-data"); response.setHeader("Content-Disposition", "attachment;fileName=" + fileName); response.setHeader("Content-Length", ""file.length());//展示下载进度 in = new FileInputStream(file); os = response.getOutputStream(); IOUtils.copyLarge(in, os); } catch (Exception e) { e.printStackTrace(); } finally { IOUtils.closeQuietly(in); IOUtils.closeQuietly(os); } } }