SpringMVC第十二阶段:SpringMVC 的文件上传

文件上传

文件上传在SpringMVC中如何实现:

1、准备一个文件上传的表单
2、导入文件上传需要的jar包
commons-fileupload-1.2.1.jar、commons-io-1.4.jar
3、配置文件上传解析器	CommonsMultipartResolver
4、配置Controller控制器的代码

1、准备一个文件上传的表单

文件上传的表单 <br/>
<form action="${pageContext.request.contextPath}/upload"
      enctype="multipart/form-data"
      method="post">
  用户名: <input type="text" name="username" /> <br>
  头像: <input type="file" name="photo" /> <br>
  <input type="submit" value="上传喽">
</form>

2、导入文件上传需要的jar包

commons-fileupload-1.2.1.jar
commons-io-1.4.jar

3、配置文件上传解析器

<!-- 配置文件上传的解析器
       id值必须是 multipartResolver , 否则无效
 -->
<bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- 防止中文乱码 -->
    <property name="defaultEncoding" value="UTF-8" />
</bean>

4、编写文件上传的Controller控制器中的代码:

@RequestMapping(value = "/upload")
public String upload(@RequestParam(name = "username") String username,
                     @RequestParam(name = "photo") MultipartFile photo){
    System.out.println(" 用户名 : " + username );
    // 获取上传文件名
    String filename = photo.getOriginalFilename();
    System.out.println("上传的文件名: " + filename);

    try {
        // transferTo() 将文件保存到某个位置
        photo.transferTo(new File("e:/" + filename));
    } catch (IOException e) {
        e.printStackTrace();
    }

    return "redirect:/index.jsp";
}

5、使用ResponseEntity返回值处理文件下载

  /**
     * 文件下载
     */
    @RequestMapping(value = "/download")
    public ResponseEntity<byte[]> download(HttpSession httpSession) throws IOException {
        ServletContext servletContext = httpSession.getServletContext();
        // 文件的下载的步骤:
//          1 读取下载文件的内容 ( 通过ServletContext对象 )
InputStream resourceAsStream = servletContext.getResourceAsStream("/file/d.jpg"); System.out.println(resourceAsStream); // 将流里的数据转换为byte字节数组 byte[] bytes = IOUtils.toByteArray(resourceAsStream); // 响应头的内容 MultiValueMap headers = new HttpHeaders(); // 3 设置下载的文件的数据类型
headers.add("Content-Type", servletContext.getMimeType("/file/d.jpg")); // 4 设置响应头,告诉客户端收到的文件做下载使用.
headers.add("Content-disposition", "attachement; filename=d.jpg"); /** * ResponseEntity表示返回给客户端的内容
* 响应行 (响应状态码.第三个参数)
* 响应头 (第二个参数)
* 响应体 (第一个参数)
*/
ResponseEntity<byte[]> responseEntity = new ResponseEntity<byte[]>(bytes,headers, HttpStatus.OK); return responseEntity; }

你可能感兴趣的:(Java,java,servlet,tomcat)