SpringMVC文件上传和下载

1.文件下载

  先在static目录下创建一个img文件用于保存图片 图片名为1.jpg

  1.2创建一个下载文件的html页面

  SpringMVC文件上传和下载

 

 

   1.3创建控制器方法

  

package com.hrf.SpringMVC.Controller;

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

@Controller
public class FileUpAndDownController {


    @RequestMapping("/testDown")
    public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException {
        //获取ServletContext对象
        ServletContext servletContext = session.getServletContext();
        //获取服务器中文件的真实路径
        String realPath = servletContext.getRealPath("/static/img/1.jpg");  //getRealPath方法获取程序部署在服务器上的文件路径
        System.out.println(realPath);
        //创建输入流
        InputStream is = new FileInputStream(realPath);
        //创建字节数组
        byte[] bytes = new byte[is.available()]; //用来获取当前输入流所对应的文件的所有字节数
        //将流读到数组中
        is.read(bytes);
        //创建HttpHeaders对象设置响应头信息
        MultiValueMap<String, String> headers = new HttpHeaders();
        //设置要下载的方法和下载文件的名字 其中只有1.jpg可以改,其他地方不能改 filename是我们设置下载文件的默认名字 attachment这个位置表示下载方式 attachment是以附件的形式下载
        headers.add("Content-Disposition", "attachment;filename=1.jpg");
        //设置响应状态码
        HttpStatus statusCode = HttpStatus.OK;
        //创建ResponseEntity对象 bytes就是响应给服务器的数据
        ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(bytes, headers, statusCode);
        //关闭输入流
        is.close();
        return responseEntity;
    }
}

在浏览器进行测试,如报错500则需要maven进行重新打包即可

  注意文件名要与控制器方法中要一致.jpg大小写也要一致

 

2.文件上传

 

  文件上传要求form表单的请求方式必须为post,并且添加属性enctype="multipart/form-data" SpringMVC中将上传的文件封装到MultipartFile对象中,通过此对象可以获取文件相关信息   SpringMVC文件上传和下载

 

   1.在pom.xml中添加依赖

  SpringMVC文件上传和下载

 

   2.在SpringMVC配置文件中添加配置

  SpringMVC文件上传和下载

 

   3.编写控制器方法  

    文件的上传功能是对文件的读和写的操作

 @RequestMapping("/testUp")
    public String testUp(MultipartFile photo,HttpSession session) throws IOException {
        //获取上传的文件的文件名
        String filename = photo.getOriginalFilename();
        //获取上传文件的后缀名    lastIndexOf是从最后一个.开始算起
        // substring是截取(包前部包后) 其中一个参数时是从该值到最后,两个参数时是从该参数到截取的参数
        String suffixName = filename.substring(filename.lastIndexOf("."));
        //创建一个时间戳作为文件名
        String uuid = UUID.randomUUID().toString().replaceAll("-","");
        //拼接uuid和文件后缀名作为文件名
        filename = uuid + suffixName;
        //获取服务器中photo目录的路径
        ServletContext servletContext = session.getServletContext();
        String photoPath = servletContext.getRealPath("photo");
        File file = new File(photoPath);
        //判断photoPath所对应路径是否存在
        if (!file.exists()){
            //如果文件不存在,则创建目录
            file.mkdir();
        }
        //得到上传文件的文件目录和文件名
        String finalPath = photoPath + File.separator + filename;
        //实现上传功能
        photo.transferTo(new File(finalPath));
        return "success";
    }

  测试代码

上一篇:ACL决策练习


下一篇:SpringMVC:HttpMessageConverter