> 文章列表 > pringMVC 05 -文件上传与下载

pringMVC 05 -文件上传与下载

pringMVC 05 -文件上传与下载

SpringMVC文件上传与下载

  • 1 文件上传
    • 1.1 导入文件上传依赖
    • 1.2 文件上传表单
    • 1.3 配置文件上传解析器
    • 1.4 定义Controller
  • 2 文件下载
    • 2.1 定义下载链接
    • 2.2 定义Controller

1 文件上传

表单上传文件 前端要求:

  1. 请求方式必须是post
  2. 请求类型必须是multipart/form-data(enctype必须为multipart/form-data(二进制流的形式提交))

1.1 导入文件上传依赖

  • 文件操作依赖 commons-io
  • 文件上传的依赖 fileupload
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version>
</dependency>
<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version><exclusions><exclusion><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId></exclusion></exclusions>
</dependency>

1.2 文件上传表单

upload.html

  • 请求方式必须是post

  • 请求的类型必须是multipart/form-data

    enctype必须为multipart/form-data(二进制流的形式提交)

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>文件上传</title>
</head>
<body><form action="/upload" method="post" enctype="multipart/form-data">名称:<input type="text" name="name">头像:<input type="file" name="file"><input type="submit" value="上传"></form>
</body>
</html>

1.3 配置文件上传解析器

springmvc.xml

  • 文件上传解析器 CommonsMultipartResolver
    • 设置最大上传的总大小
    • 设置单个文件上传的大小
    • 设置文件上传编码格式
<!-- 文件上传解析器 CommonsMultipartResolver-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!--最大上传的总大小--><property name="maxUploadSize" value="10000000"></property><!--单个文件上传的大小--><property name="maxUploadSizePerFile" value="2000000"></property><!--文件上传编码格式--><property name="defaultEncoding" value="utf-8"></property>
</bean>

1.4 定义Controller

  1. 处理文件上传的内容
  2. 获取上传文件的名称–获取文件的后缀–获取新文件名称
  3. 将上传的文件保存到指定的位置
  4. 成功跳转
@Controller
public class UploadController {@RequestMapping("/uploadFile")public String upload(MultipartFile file,String name){//文件上传的操作//1、定义文件的位置(a、当前项目   b、本地磁盘)//2、解决文件名冲突问题//--------------------------------------------------//获取上传的文件名String filename = file.getOriginalFilename();//FilenameUtils.getExtension(filename); 获取文件后缀名  (注意:没有.)String fileNameExt = filename.substring(filename.lastIndexOf("."));filename = UUID.randomUUID().toString().replace("-","")+fileNameExt;File f = new File("D:\\\\workspace\\\\upload",filename);try {//将上传文件保存指定位置file.transferTo(f);} catch (IOException e) {e.printStackTrace();}return "ok";}
}

2 文件下载

2.1 定义下载链接

前端页面定义下载链接

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><img src="/img/e791dfcb84bf4708aa5985190d23c0e9.jpg" width="120px" height="120px"><br><a href="/download?name=e791dfcb84bf4708aa5985190d23c0e9.jpg">点击下载</a>
</body>
</html>

2.2 定义Controller

  • java注释中不能出现单斜杠(错误,非法的Unicode转义)
  1. 根据文件名创建输入流对象
  2. 读取磁盘文件,通过响应流写到客户端
  3. 设置响应头,告知浏览器是下载操作 attachment以附件形式响应
  4. 拷贝方法。将文件读取出来, 通过响应流写客户端 向浏览器返回输出流
@Controller
public class DownloadController {@RequestMapping("/download")public void download(String name, HttpServletResponse response) throws IOException {//根据文件名创建输入流对象  name是前端拿到的//读取D:\\\\workspace\\\\upload\\\\name文件,通过响应流写到客户端  \\n \\tFileInputStream fis = new FileInputStream("D:\\\\workspace\\\\upload\\\\"+name);//设置响应头,告知浏览器是下载操作   attachment以附件形式响应response.setHeader("Content-Disposition","attachment;filename="+name);//拷贝方法。将文件读取出来, 通过响应流写客户端  (向浏览器返回输出流)IOUtils.copy(fis,response.getOutputStream());}
}