文件上传——Spring MVC方式

  • 必要前提

    • form表单的enctype取值必须是multipart/form-data。enctype的功能是请求正文的类型

    • method必须是post

    • 需要有<input type="file" />标签

    • 使用commons-fileupload组件实现文件,需要导入该组件相应的支撑jar包

      • commons-fileupload-1.3.1.jar

      • commons-io-2.4.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>
    <form action="user/upload" method="post" enctype="multipart/form-data">
        <input type="file" name="avatar" />
        <input type="submit" value="上传" />
    </form>
  • Spring MVC方式上传文件

    • 在springmvc.xml配置文件中配置文件解析器,而且bean的id是一个固定值,不能改变

      <!-- 配置文件解析器 -->
      <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
          <!-- 文件上传的相关限制,例如文件的大小10M=10*1024*1024=10485760,这里是以字节为单位 -->
          <property name="maxUploadSize" value="10485760" />
      </bean>
  • 控制器方法的参数名称必须和表单上文件的input标签的name值相同
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.multipart.MultipartFile;
    
@Controller
@RequestMapping(value="user")
public class UserController{
    @RequestMapping(value="upload")
    public String upload(HttpServletRequest request, MultipartFile avatar) throws Exception {
        //使用fileupload组件上传文件
        //文件保存的地址
        String path = request.getSession().getServletContext().getRealPath("/uploads/");
        File file = new File(path);
        if(!file.exists()){
            file.mkdirs();
        }
        //处理文件上传项
        // 获取文件上传的名称
        String filename = avatar.getOriginalFilename();
        //使用uuid生成唯一的名称作为文件的名称
        String uuid = UUID.randomUUID().toString().replace("-", "");
        filename = uuid+"_"+filename;
        //上传文件
        avatar.transferTo(new File(path, filename));
        return "user";
    }
}
原文地址:https://www.cnblogs.com/aitiknowledge/p/12796535.html