springmvc实现文件上传
一.前端需要准备的工作:
1.表单的提交方式必须为post提交 method="post"。
2.加入enctype="multpart/form-data".
3.添加标签<input type="file">
<%@ page language="java" isELIgnored="false" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <body> <h2>springmvc文件上传</h2> <form action="${pageContext.request.contextPath}/file/upload" method="post" enctype="multipart/form-data"> 用户名称:<input type="text" name="uname" placeholder="username"> <input type="file" name="myfile"> <input type="submit" value="开始上传"> </form> </body> </html>
二.后端需要准备的工作:
1.引入的依赖(非maven工程需要引入对应jar包):
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
2.配置文件上传的解析器(在springmvc的配置文件中引入)
<!--配置文件上传的解析器--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="10485760"/><!--文件上传最大大小--> <property name="defaultEncoding" value="utf-8"/><!--设置编码格式--> </bean
3.实现文件上传的java代码
package com.woniu.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import java.io.File; import java.util.UUID; /** * springmvc在文件上传时默认 * 使用fileupload。jar commons.io.jar * */ @RequestMapping("/file") @Controller public class FileUploadController { @RequestMapping("/upload") public String fileUpload(@RequestParam("myfile") MultipartFile file, HttpServletRequest req){ //1.获取原文件名 String originalFilename = file.getOriginalFilename(); //2.让文件名不重复 String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));//获取上传文件的后缀 String uuid = UUID.randomUUID().toString().replace("-", "");//获取不重复的uuid,用于拼接新的文件名 //3.获取服务器的路径(绝对路径) ServletContext sc = req.getServletContext();//得到服务器的上下文 String realPath = sc.getRealPath("upload");//文件夹的绝对路径 String filename = realPath + File.separator + uuid + suffix;//拼接新的文件名 System.out.println(filename); //2.开始上传文件 File f = new File(filename); try { file.transferTo(f); }catch (Exception e){ e.printStackTrace(); } return "success";//返回到成功页面 } }
springmvc上传文件的思路:
1.前端上传的文件通过字节流传输到controller
2.通过MutipartFile file 得到从前端得到的文件
3.通过file.getOriginalFilename()得到文件的原文件名
4.然后通过file.transferTo("保存路径"),将文件上传。