`
843977358
  • 浏览: 245489 次
  • 性别: 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 4.0

    9. **多Part文件上传**:支持多文件上传,利用MultipartFile接口处理上传文件,便于处理复杂的表单提交场景。 10. **国际化支持**:通过消息源(MessageSource)和LocaleResolver,Spring MVC提供了强大的国际化...

    Spring MVC 4.2.4.RELEASE 中文文档

    Spring MVC提供了方便的文件上传和下载功能,开发者可以通过简单的API来实现复杂的文件操作。 **6. 异常处理** 通过自定义异常处理器,Spring MVC允许优雅地处理运行时异常,提供了统一的错误页面和异常信息。 **7...

    Spring mvc 教程

    - **允许其他MVC实现**:Spring MVC 支持多种不同的 MVC 实现,这为开发者提供了更多的选择性。 - **DispatcherServlet**:这是 Spring MVC 的前端控制器,负责接收 HTTP 请求并分发给合适的后端组件处理。 - **...

    精通Spring MVC4

    配置Spring MVC通常涉及web.xml文件中的DispatcherServlet配置,以及Spring配置文件中定义的Controller、ViewResolver和其他组件。Spring Boot简化了这一过程,通过自动配置和@SpringBootApplication注解可以快速...

    Spring mvc5.0.3 所有jar包

    以上只是Spring MVC 5.0.3中的一部分关键特性,实际上还有许多其他功能和优化,如国际化、缓存、上传文件等,都极大地提高了开发效率和应用程序的可维护性。在实际项目中,理解并熟练掌握这些知识点,将有助于构建出...

    spring mvc spring uploadfiles 插件 实现多附件和存文本同时上传解决代码(实战项目)

    根据提供的文件信息,本文将详细解析如何在Spring MVC框架中实现多附件与文本信息的同时上传功能。这在很多实际应用场景中都非常有用,例如用户在提交表单时常常需要附带图片或其他类型的文件。 ### 一、Spring MVC...

    JAVA(spring mvc)搭建了文件上传的接口,Android已经调试成功

    在本项目中,开发者利用Java的Spring MVC框架构建了一个文件上传的接口,该接口能够...通过学习这个项目,开发者可以掌握Spring MVC文件上传的实现,以及Android如何与服务器进行文件交互,进一步提升跨平台开发能力。

    spring MVC基础学习

    - 视图(View):负责渲染模型数据,Spring MVC支持多种视图技术如JSP、FreeMarker、Thymeleaf等。 5. **数据绑定与验证**: - 数据绑定:Spring MVC可以自动将请求参数绑定到Controller方法的参数上。 - 数据...

    Spring MVC 图片上传有插件+jsp+后台

    在本文中,我们将深入探讨如何在Spring MVC框架中实现图片上传功能。Spring MVC是一个流行的Java Web开发框架,它提供了一种模块化的方式来构建Web应用程序,包括处理表单数据和文件上传。在这里,我们重点关注如何...

    8-Spring-mvc-文件上传1

    在Spring MVC框架中,文件上传是一项常见的功能,它允许用户通过Web表单上传文件到服务器。Spring MVC通过集成Apache Commons FileUpload库实现了这一功能。在本文中,我们将深入探讨如何配置和使用Spring MVC进行...

    Expert Spring MVC

    《Expert Spring MVC and Web Flow》这本书还介绍了 Spring MVC 与 Spring Web Flow 的结合使用,Spring Web Flow 是一个用于构建复杂 Web 应用程序的框架,它可以处理复杂的交互式对话流程。 - **Web Flow** 提供...

    Spring mvc showcase

    11. **上传文件** Spring MVC提供`MultipartFile`接口处理文件上传,可以通过`@RequestParam("file") MultipartFile file`接收上传的文件。 12. **RESTful API** Spring MVC非常适合构建RESTful服务,使用`@...

    spring mvc框架需要用到的jar包

    7. **spring-web.jar**:提供了与Web相关的功能,如HTTP上下文、上传文件的支持等。它是Spring MVC的基础之一,使Spring可以与Web应用服务器交互。 8. **jstl.jar**:JavaServer Pages Standard Tag Library,用于...

    spring mvc项目后端源码

    15. **上传文件**:Spring MVC 使用 `MultipartFile` 类处理文件上传,可以通过 `@RequestParam("file") MultipartFile file` 获取上传的文件。 16. **模板引擎**:除了传统的 JSP,Spring MVC 还支持 Thymeleaf 等...

    Spring MVC 4.3.4

    7. **上传下载支持**:Spring MVC提供方便的API处理文件上传和下载,包括MultipartFile接口和StreamingResponseBody。 8. **RESTful风格的支持**:通过@RequestMapping和HttpMethod注解,可以方便地创建符合REST...

    spring-mvc学习文档资料

    Spring MVC 学习文档资料 Spring MVC 是一个基于 Java 的 Web 框架,提供了一个灵活、可...本文档还涵盖了 Spring MVC 的高级定制、多文件上传、主题、multipart 文件上传、Servlet 容器初始化配置等方面的知识点。

    Spring mvc小程序

    11. **Multipart File Upload**:如果UserTest涉及到文件上传,Spring MVC通过`MultipartFile`接口提供支持,可以方便地处理HTTP请求中的多部分数据。 12. **RESTful API设计**:Spring MVC也支持RESTful风格的API...

Global site tag (gtag.js) - Google Analytics