上一次我们分享了SpringMVC的入门及基本使用。本次将要分享的内容是SpringMVC的上传下载。
1、流程
1、springmvc.xml中添加多功能解析器配置
导入pom
<dependency> <groupId>commons-fileuploadgroupId> <artifactId>commons-fileuploadartifactId> <version>1.3.3version> dependency>
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="UTF-8">property> <property name="maxUploadSize" value="52428800">property> <property name="resolveLazily" value="true"/> bean>2、前台的页面 添加 多功能表单设置 multipart/form-data
3、后台要利用multipartFile类进行 文件接收
注:multipartFile的属性名一定要跟form中的表单属性名一致
import com.zhw.model.Clazz; import org.springframework.web.multipart.MultipartFile; /** * @author louis * @create 2022-08-18 21:35 */ public class ClazzDto extends Clazz { private MultipartFile picFile; public MultipartFile getPicFile() { return picFile; } public void setPicFile(MultipartFile picFile) { this.picFile = picFile; } }4、在idea中完成图片请求地址与硬盘中地址的映射关系
5、编写web层文件
ClazzController
// 文件上传 @RequestMapping("/upload") public String upload(ClazzDto clazzDto){ try { //前台上传的文件 MultipartFile picFile = clazzDto.getPicFile(); //实际应该配置到resource.properties中 String diskPath="D:/temp/新建文件夹/";//图片存放地址 //http://localhost:8080/upload/mvc/...png String requestPath="/upload/mvc/";//数据库保存地址,也是访问地址 //拿到上传文件的名字 String filename = picFile.getOriginalFilename(); FileUtils.copyInputStreamToFile(picFile.getInputStream(),new File(diskPath+filename)); //将图片上传图片之后,并且将图片地址更新到数据库中 Clazz clazz=new Clazz(); clazz.setCid(clazzDto.getCid()); clazz.setPic(requestPath+filename); this.clazzBiz.updateByPrimaryKeySelective(clazz); }catch (Exception e){ e.printStackTrace(); } return "redirect:/clz/list"; }
流程
1、点击下载传递文件的ID,通过文件的ID查询出文件的路径
2、通过文件的请求地址,转换成文件存放的硬盘地址
3、将硬盘中文件下载下来——>固定代码
@RequestMapping(value="/download") public ResponseEntity<byte[]> download(Clazz clazz, HttpServletRequest req){ try { //先根据文件id查询对应图片信息 Clazz clz = this.clazzBiz.selectByPrimaryKey(clazz.getCid()); String diskPath = "D:/Temp/images/"; String reqPath = "/upload/mvc/"; String realPath = clz.getPic().replace(reqPath,diskPath); String fileName = realPath.substring(realPath.lastIndexOf("/")+1); //下载关键代码 File file=new File(realPath); HttpHeaders headers = new HttpHeaders();//http头信息 String downloadFileName = new String(fileName.getBytes("UTF-8"),"iso-8859-1");//设置编码 headers.setContentDispositionFormData("attachment", downloadFileName); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); //MediaType:互联网媒介类型 contentType:具体请求中的媒体类型信息 return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.OK); }catch (Exception e){ e.printStackTrace(); } return null; }
本文仅简单分享了,图片的上传下载,在上传下载的时候注意映射的路径,因为数据库的路径与配置的路径名不一致导致图片没出来。还有就是,注意:multipartFile的属性名一定要跟form中的表单属性名一致

如有错误还望指正,谢谢啦。