SpringMVC 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-iogroupId>
    <artifactId>commons-ioartifactId>
    <version>2.4version>
dependency>
<dependency>
    <groupId>commons-fileuploadgroupId>
    <artifactId>commons-fileuploadartifactId>
    <version>1.3.3version>
    <exclusions>
        <exclusion>
            <groupId>javax.servletgroupId>
            <artifactId>servlet-apiartifactId>
        exclusion>
    exclusions>
dependency>

1.2 文件上传表单

upload.html

  • 请求方式必须是post

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

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




    
    文件上传


    
名称: 头像:

1.3 配置文件上传解析器

springmvc.xml

  • 文件上传解析器 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>Titletitle>
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 \t
        FileInputStream fis = new FileInputStream("D:\\workspace\\upload\\"+name);
        //设置响应头,告知浏览器是下载操作   attachment以附件形式响应
        response.setHeader("Content-Disposition","attachment;filename="+name);
        //拷贝方法。将文件读取出来, 通过响应流写客户端  (向浏览器返回输出流)
        IOUtils.copy(fis,response.getOutputStream());
    }
}

你可能感兴趣的:(Java,#,框架演进,spring,java)