JAVA在SSM框架中实现文件的上传和下载
-
前期准备工作
-
在pom.xml文件中导入依赖配置
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency>
-
在SpringMVC的核心配置文件中配置文件上传解析器
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> //设置文件编码 <property name="defaultEncoding" value="UTF-8"/> </bean>
-
-
文件上传
注意:
1.文件上传可能会出现重名现象,因此可以使用 UUID 对文件进行重命名操作,避免出现重名的现象
2. MultipartFile pimage 的参数名一定要与前端页面传过来的name中的值一致
//Ajax理照片文件上传(将文件保存到项目工程target的指定目录下) @ResponseBody @RequestMapping("/ajaxImg") public Object ajaxImgFileUpload(MultipartFile pimage, HttpSession session) throws IOException { //获取上传的文件的文件名 String uploadFileName = pimage.getOriginalFilename(); //提取生成最终文件的文件名: UUID +上传文件名后缀 saveFileName = FileNameUtil.getUUIDFileName() + FileNameUtil.getFileType(uploadFileName); //获取ServletContext对象,然后获取工程中target存储照片的目录真实路径 String imagePath =session.getServletContext().getRealPath("image_big"); //创建目录对应的File对象 File file = new File(imagePath); //判断当前目录是否存在 if(!file.exists()){ //不存在,进行创建 file.mkdir(); } //拼接最终文件的全部路径 String finalPath = imagePath + File.separator + saveFileName; //上传(转存)文件,存储到Target的目录下 pimage.transferTo(new File(finalPath)); //返回客户端JSON对象,封装图片的路径,在页面进行回显 JSONObject imgObject = new JSONObject(); imgObject.put("imgurl",saveFileName); //返回JSON对象的字符串形式 return imgObject.toString(); }
- 文件名工具类
public class FileNameUtil { //根据UUID生成文件名 public static String getUUIDFileName() { UUID uuid = UUID.randomUUID(); //替代UUId字符串中的横杆字符 return uuid.toString().replace("-", ""); } //从请求头中提取文件名和类型(Content-Disposition: form-data; name="myfile"; filename="a_left.jpg") public static String getRealFileName(String context) { //获取等号所处的位置下标 int index = context.lastIndexOf("="); //字符串截取文件名 String fileName = context.substring(index + 2, context.length() - 1); return fileName; // 取出的文件名为: a_left.jpg } //根据给定的文件名获取文件后缀 public static String getFileType(String fileName){ //获取后缀名中点的下标位置 int index = fileName.lastIndexOf("."); //返回后缀名 .jpg return fileName.substring(index); } }
-
文件下载
//文件下载控制器 @RequestMapping("/test/down") public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException { //获取ServletContext对象 ServletContext servletContext = session.getServletContext(); //获取服务器中文件的真实路径 String realPath = servletContext.getRealPath("/image"); realPath = realPath + File.separator + "1.jpg"; //创建输入流 InputStream is = new FileInputStream(realPath); //创建字节数组 is.available代表输入流对应文件的字节数 byte[] bytes = new byte[is.available()]; //将流读到字节数组中 is.read(bytes); //创建HttpHeaders对象设置响应头信息 MultiValueMap<String, String> headers = new HttpHeaders(); //设置要下载方式以及下载文件的名字 headers.add("Content-Disposition", "attachment;filename=1.jpg"); //设置响应状态码 HttpStatus statusCode = HttpStatus.OK; //创建ResponseEntity对象 ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(bytes, headers,statusCode); //关闭输入流 is.close(); return responseEntity; }