文件上传总结

参考文章:
https://www.cnblogs.com/yunliu0603/p/9504756.html
https://www.cnblogs.com/tengyunhao/p/7670293.html

注意:
单文件 MultipartFile file;
多文件 MultipartFile[] file;

判断文件是否为空:!file.isEmpty() ---> 不为空

获取上传文件名:String originalFilename = file.getOriginalFilename() 包括文件名的后缀

文件保存路径:String filePath = request.getServletContext().getRealPath("/") + "upload/" + originalFilename;

初始化文件信息:File newFile = new File(filePath);

创建目录:newFile.getParentFile().mkdir();

转存文件:file.transferTo(newFile);

步骤:
1.编写一个控制类;
2.编写提交表单的 action 方法,并使用 SpringMVC 注解 @RequestParam 来指定表单中的 file 参数;
3.指定一个用于保存文件的 web项目路径;
4.通过 MultipartFile 的 transferTo() 来转存文件到相应的路径;
5.编写 form 表单;
6.在 springMVC 配置文件中,定义文件上传解析器;

springMVC配置文件:

    <!-- 定义文件上传解析器 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 设定默认编码 -->
        <property name="defaultEncoding" value="UTF-8"></property>
        <!-- 设定文件上传的最大值为5MB,5*1024*1024 -->
        <property name="maxUploadSize" value="5242880"></property>
        <!-- 设定文件上传时写入内存的最大值,如果小于这个参数不会生成临时文件,默认为10240 -->
        <property name="maxInMemorySize" value="40960"></property>
        <!-- 上传文件的临时路径,在启动服务时,就会进行创建 -->
        <property name="uploadTempDir" value="fileUpload/temp"></property>
        <!-- 延迟文件解析 -->
        <property name="resolveLazily" value="true"/>
    </bean>

MultipartResolver 用于处理文件上传,当收到请求时 DispatcherServlet 的 checkMultipart() 方法会调用 MultipartResolver 的 isMultipart() 方法判断请求中是否包含文件。如果请求数据中包含文件,则调用 MultipartResolver 的 resolveMultipart() 方法对请求的数据进行解析,然后将文件数据解析成 MultipartFile 并封装在 MultipartHttpServletRequest (继承了 HttpServletRequest) 对象中,最后传递给 Controller。
MultipartResolver 是一个接口,它的实现类如下图所示,分为 CommonsMultipartResolver 类和 StandardServletMultipartResolver 类。


image

其中 CommonsMultipartResolver 使用 commons Fileupload 来处理 multipart 请求,所以在使用时,必须要引入相应的 jar 包;
而 StandardServletMultipartResolver 是基于 Servlet 3.0来处理 multipart 请求的,所以不需要引用其他 jar 包,但是必须使用支持 Servlet 3.0的容器才可以,以tomcat为例,从 Tomcat 7.0.x的版本开始就支持 Servlet 3.0了。

关于 MultipartResolver 的具体讲解,参考:https://www.cnblogs.com/tengyunhao/p/7670293.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容