`
843977358
  • 浏览: 241646 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring MVC 中上传文件的多种实现与区别

阅读更多

1.普通方式(没有配置multipartResolver

/**
     * @Description 上传文件
     * @author zhangyd
     * @date 2015年12月1日 下午3:02:23
     * @return
     * @throws Exception
     */
    @RequestMapping("/uploadFile")
    @ResponseBody
    public Object uploadFile(HttpServletRequest request) throws Exception {
        String path = LoadSystemProperties.UPLOAD_FILES_PATH;
        File file = new File(path);
        if (!file.exists()) {
            file.mkdirs();
        }
        //获取图片url地址
        String fileName = "";// 文件名称
        /**上传文件处理内容**/
        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload sfu = new ServletFileUpload(factory);
        sfu.setHeaderEncoding("UTF-8"); // 处理中文问题
        sfu.setSizeMax(1024 * 1024); // 限制文件大小
        try {
            List<FileItem> fileItems = sfu.parseRequest(request); // 解码请求
            for (FileItem fi : fileItems) {
                String name = fi.getName();
                if (name == null) {
                    continue;
                }
                fileName = UUID.randomUUID() + name.substring(name.lastIndexOf("."), name.length());
                fi.write(new File(path, fileName));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        //获取图片url地址
        return path + "\\" + fileName;
    }

 

 
注:以上使用必须是在没有配置multipartResolver的前提下,配置multipartResolver后将会获取不到

 
这个问题只需要了解下SpringMVC中CommonsMultipartResolver的处理源码就会明白

 /**
	 * Parse the given servlet request, resolving its multipart elements.
	 * @param request the request to parse
	 * @return the parsing result
	 * @throws MultipartException if multipart resolution failed.
	 */
	protected MultipartParsingResult parseRequest(HttpServletRequest request) throws MultipartException {
		String encoding = determineEncoding(request);
		FileUpload fileUpload = prepareFileUpload(encoding);
		try {
			List<FileItem> fileItems = ((ServletFileUpload) fileUpload).parseRequest(request);
			return parseFileItems(fileItems, encoding);
		}
		catch (FileUploadBase.SizeLimitExceededException ex) {
			throw new MaxUploadSizeExceededException(fileUpload.getSizeMax(), ex);
		}
		catch (FileUploadException ex) {
			throw new MultipartException("Could not parse multipart servlet request", ex);
		}
	}

 

因为,配置完CommonsMultipartResolver之后,实际上SpringMVC已经对当前的HttpServletRequest处理过了;因此,当再次通过sfu.parseRequest(request);// 解码请求获取请求中的文件时,就会获取不到了。
2.通过SpringMVC的multipartResolver处理器获取
注:必须配置以下内容
<!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 -->
	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="defaultEncoding" value="UTF-8" />
		<!-- 指定所上传文件的总大小不能超过100MB。注意maxUploadSize属性的限制不
                是针对单个文件,而是所有文件的容量之和 -->
		<!-- <property name="maxUploadSize" ><value>104857600</value></property> -->
		<!-- <property name="uploadTempDir" value="E:\temp"></property> -->
		<!-- <property name="resolveLazily"></property> -->
		<!-- <property name="servletContext"></property> -->
		<!-- <property name="maxInMemorySize"></property> -->
	</bean>
 1).
public void upload(HttpServletRequest request) {
        // 转型为MultipartHttpRequest
        try {
            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
            List<MultipartFile> fileList = multipartRequest.getFiles("file");
            for (MultipartFile mf : fileList) {
                if (!mf.isEmpty()) {
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 2).
/**
     * @param files
     * @return
     * @throws Exception
     * @Description 上传文件
     * @author zhangyd
     * @date 2015年12月1日 下午3:02:23
     */
    @RequestMapping("/uploadFile2")
    @ResponseBody
    public Object uploadFile(@RequestParam(value = "file") MultipartFile[] files) throws Exception {
        String path = LoadSystemProperties.UPLOAD_FILES_PATH;
        File file = new File(path);
        if (!file.exists()) {
            file.mkdirs();
        }
        for (MultipartFile fi : files) {
            path = FileUtil.getUploadFilePath(fi);
        }
        //获取图片url地址z
        return path;
    }
 
  • 大小: 21.4 KB
  • 大小: 9.7 KB
分享到:
评论

相关推荐

    基于Spring MVC的web框架 1.1.11

    版本管理,服务根路径工具类,文件上传工具类 1.0.10 集成ueditor在线编辑器 1.0.11 地址联动 1.0.12 Excel工具类 Word工具类 Java NIO实现socket工具类 分布式session jdk升级到1.7 嵌入式redis服务(只支持linux) ...

    spring4.3.9相关jar包

    spring-web.jar(必须) :这个jar 文件包含Web 应用开发时,用到Spring 框架时所需的核心类,包括自动载入Web Application Context 特性的类、Struts 与JSF 集成类、文件上传的支持类、Filter 类和大量工具辅助类。...

    Spring-Reference_zh_CN(Spring中文参考手册)

    13.8. Spring对分段文件上传(multipart file upload)的支持 13.8.1. 介绍 13.8.2. 使用MultipartResolver 13.8.3. 在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置标签库 13.9.2. form标签 ...

    Spring中文帮助文档

    13.8. Spring对分段文件上传(multipart file upload)的支持 13.8.1. 介绍 13.8.2. 使用MultipartResolver 13.8.3. 在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置 13.9.2. form标签 ...

    spring4.1核心包

    包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。 18. spring-webmvc-4.1.1.RELEASE.jar 包含...

    Spring 2.0 开发参考手册

    13.8. Spring对分段文件上传(multipart file upload)的支持 13.8.1. 介绍 13.8.2. 使用MultipartResolver 13.8.3. 在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置标签库 13.9.2. form...

    基于SpringMVC的一个web框架

    版本管理,服务根路径工具类,文件上传工具类 1.0.10 集成ueditor在线编辑器 1.0.11 地址联动 1.0.12 Excel工具类 Word工具类 Java NIO实现socket工具类 分布式session jdk升级到1.7 嵌入式redis服务(只支持linux) ...

    spring chm文档

    13.8. Spring对分段文件上传(multipart file upload)的支持 13.8.1. 介绍 13.8.2. 使用MultipartResolver 13.8.3. 在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置标签库 13.9.2. form...

    Spring API

    13.8. Spring对分段文件上传(multipart file upload)的支持 13.8.1. 介绍 13.8.2. 使用MultipartResolver 13.8.3. 在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置 13.9.2. form标签 ...

    SpringMVC基础上的web框架

    版本管理,服务根路径工具类,文件上传工具类 1.0.10 集成ueditor在线编辑器 1.0.11 地址联动 1.0.12 Excel工具类 Word工具类 Java NIO实现socket工具类 分布式session jdk升级到1.7 嵌入式redis服务(只支持linux) ...

    Spring.3.x企业应用开发实战(完整版).part2

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...

    springmvc 文件上传下载

    用springmvc3基于注解方式实现的文件上传与下载,多种方式实现

    Spring3.x企业应用开发实战(完整版) part1

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...

    java项目源码之SaaS OA协同办公软件 v2.0的实现.rar

    在实现过程中,该软件采用了 Java 作为后端开发语言,结合了多种流行的开源框架和技术,比如 Spring Boot、Spring MVC、MyBatis 等,以及常用的数据库如 MySQL 或 PostgreSQL。这些框架和技术提供了稳健的基础架构,...

    基于微信小程序的原创音乐小程序的设计与实现+ssm框架.rar

    使用Spring MVC框架实现前后端数据交互,采用RESTful风格的API设计,提高了系统的灵活性和易用性。 结合MyBatis框架进行数据持久化操作,实现了与数据库的交互,包括用户信息、音乐信息、评论信息等数据的管理和操作...

    Java项目源码基于ssm框架的网络办公系统+jsp(完整源码+说明文档+lw).rar

    网络办公系统是一个基于Java的Web应用程序,采用SSM(Spring + Spring MVC + MyBatis)框架实现后端逻辑,并结合JSP(JavaServer Pages)技术构建前端页面。该系统旨在帮助企业实现员工在线办公、协同工作和信息共享...

    Java Web程序设计教程

    6.5.2struts2文件上传实现方式 136 6.5.3struts2文件下载实现方式 141 本章小结 143 课后练习 144 第7章 struts2中应用模板语言 145 7.1模板语言简介 145 7.2应用velocity 146 7.2.1velocity基础 146 7.2.2...

    SpringBoot-Web-Mvc-Security:以Spring方式构建企业Java应用程序

    搜索和排序数据使用select2 ajax远程数据的分页结果发送带有附件的电子邮件模板多种语言的Web应用程序生成PDF和Excel文件使用Ajax以一种形式上传数据和文件建立和运行mvn packagejava -jar SpringBoot-0.0.1-...

    一个可以直接运行的基于SpringMVC的web框架1.1.12

    版本管理,服务根路径工具类,文件上传工具类 1.0.10 集成ueditor在线编辑器 1.0.11 地址联动 1.0.12 Excel工具类 Word工具类 Java NIO实现socket工具类 分布式session jdk升级到1.7 嵌入式redis服务(只支持linux) ...

    可以直接运行的基于SpringMVC的web框架示例,也可以直接当公司框架

    版本管理,服务根路径工具类,文件上传工具类 1.0.10 集成ueditor在线编辑器 1.0.11 地址联动 1.0.12 Excel工具类 Word工具类 Java NIO实现socket工具类 分布式session jdk升级到1.7 嵌入式redis服务(只支持linux) ...

Global site tag (gtag.js) - Google Analytics