<form>表单的enctype属性取值必须是multipart/form-data,表示表单内容是分块的
<form>表单的method属性取值必须是post,因为get有长度限制
提供一个<input>标签,type属性取值是file,用来上传文件
导入文件上传的相关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.4</version>
</dependency>
部署在Tomcat服务器上时,文件上传的目录在Tomcat\apache-tomcat-8.5.43\webapps\项目名目录下
/**
     * 传统方式文件上传
     * @param request
     * @return
     * @throws Exception
     */
    @RequestMapping(path = "/fileUpload1")
    public String fileUpload1(HttpServletRequest request) throws Exception {
        System.out.println("传统方式文件上传");
        //先获取要上传的文件目录
        String realPath = request.getSession().getServletContext().getRealPath("/uploads");
        //创建File对象,向该路径下上传文件
        File file = new File(realPath);
        //判断该路径是否存在,如果不存在,创建该路径
        if(!file.exists()){
            file.mkdirs();
        }
        //创建磁盘文件项工厂
        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        //解析request对象
        List<FileItem> fileItems = upload.parseRequest(request);
        // 遍历
        for (FileItem fileItem : fileItems) {
            //判断文件项是普通表单项还是上传的文件
            if(fileItem.isFormField()){
            }else{
                //获取上传文件的名称
                String filename = fileItem.getName();
                //把文件的名称设置唯一值,使用uuid
                String uuid = UUID.randomUUID().toString().replace("-", "");
                filename = uuid + filename;
                //上传文件
                fileItem.write(new File(file,filename));
                //删除临时文件
                fileItem.delete();
            }
        }
        return "success";
}
SpringMVC框架提供了MultipartFile对象,该对象表示上传的文件,要求变量名称必须和表单file标签的
name属性名称相同
<h1>SpringMVC文件上传</h1>
<form action="file/fileUpload2" method="post" enctype="multipart/form-data">
    文件上传:<input type="file" name="fileUpload"><br>
    <input type="submit" value="上传文件">
</form>
/**
     * SpringMVC文件上传
     * @param request
     * @param fileUpload
     * @return
     * @throws Exception
     */
    @RequestMapping(path = "/fileUpload2")
    public String fileUpload2(HttpServletRequest request, MultipartFile fileUpload) throws Exception {
        System.out.println("SpringMVC文件上传");
        //先获取要上传的文件目录
        String realPath = request.getSession().getServletContext().getRealPath("/uploads");
        //创建File对象,向该路径下上传文件
        File file = new File(realPath);
        //判断该路径是否存在,如果不存在,创建该路径
        if(!file.exists()){
            file.mkdirs();
        }
        //获取上传文件的名称
        String filename = fileUpload.getOriginalFilename();
        //把文件的名称设置唯一值,使用uuid
        String uuid = UUID.randomUUID().toString().replace("-", "");
        filename = uuid + filename;
        //上传文件
        fileUpload.transferTo(new File(file,filename));
        return "success";
}
配置文件解析器对象,在SpringMVC.xml中添加配置
<!--配置文件解析器,要求id必须是multipartResolver-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="10485760"/><!--限制上传的文件大小-->
    </bean>
搭建图片服务器
导入跨服务器所需的jar包,在pom.xml中添加依赖的坐标
<dependency>
	<groupId>com.sun.jersey</groupId>
	<artifactId>jersey-core</artifactId>
	<version>1.18.1</version>
</dependency>
<dependency>
	<groupId>com.sun.jersey</groupId>
	<artifactId>jersey-client</artifactId>
	<version>1.18.1</version>
</dependency>
创建文件上传的jsp页面
<h1>SpringMVC跨服务器文件上传</h1>
<form action="file/fileUpload3" method="post" enctype="multipart/form-data">
    文件上传:<input type="file" name="fileUpload"><br>
    <input type="submit" value="上传文件">
</form>
创建控制器
/**
* SpringMVC跨服务器方式的文件上传
* @param request
* @return
* @throws Exception
*/
@RequestMapping(value="/fileupload3")
public String fileupload3(MultipartFile upload) throws Exception {
	System.out.println("SpringMVC跨服务器方式的文件上传...");
	// 定义图片服务器的请求路径
	String path = "http://localhost:9090/springmvc_fileUpload/uploads/";
	// 获取到上传文件的名称
	String filename = upload.getOriginalFilename();
	String uuid = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
	// 把文件的名称唯一化
	filename = uuid+"_"+filename;
	// 向图片服务器上传文件
	// 创建客户端对象
	Client client = Client.create();
	// 连接图片服务器
	WebResource webResource = client.resource(path+filename);
	// 上传文件
	webResource.put(upload.getBytes());
	return "success";
}
原文:https://www.cnblogs.com/codeDD/p/12699129.html