使用MultipartHttpServletRequest实现文件的上传和保存

0 阅读1分钟

本文详细介绍如何在SpringMVC框架下实现文件上传功能,包括pom.xml中依赖的配置、SpringMVC配置文件的设置、前台表单提交方式及后台控制器处理流程。 首先在pom.xml中导入依赖:

    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.3.3</version>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.5</version>
    </dependency>

配置SpringMVC配置文件 mvc.xml:

<bean id="multipartResolver"
      class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="10485760"/>
    <property name="defaultEncoding" value="UTF-8"/>
    <property name="maxInMemorySize" value="40960" />
</bean>

注意此处的id="multipartResolver",否则会导致

java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade

cannot be cast to org.springframework.web.multipart.MultipartHttpServletRequest

或者

nested exception is java.lang.IllegalStateException: Current request is not of type [org.springframework.web.multipart.MultipartHttpServletRequest]: ServletWebRequest:

两种错误。

配置前台表单提交:

AI写代码 controller层:

@Controller @RequestMapping("/file") public class FileUploadController {

@RequestMapping("/upload")
public String uploadImage(HttpServletRequest request) throws IOException {

    CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
    boolean isFileExist = commonsMultipartResolver.isMultipart(request);
    
    if (isFileExist)
    {

    MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;
    
    //获取文件
    MultipartFile multipartFile=multipartHttpServletRequest.getFile("filename");
    System.out.println("文件名:"+multipartFile.getName());
    
    //获取文件真实路径
    String realPath = request.getServletContext().getRealPath("/upload");
    System.out.println(realPath);

    //随机出文件名
    int random = (int) (Math.random() * 10000);
    System.out.println(random);

    
    String originalFilename = multipartFile.getOriginalFilename();
    System.out.println(originalFilename);

    String substring = originalFilename.substring(originalFilename.indexOf("."));
    System.out.println(substring);

    String filePathAndFileName = realPath+ random + substring;
    System.out.println(filePathAndFileName);

    File file = new File(filePathAndFileName);


    multipartFile.transferTo(file);
    }
    return "welcome";
}

}