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; }
相关推荐
9. **多Part文件上传**:支持多文件上传,利用MultipartFile接口处理上传文件,便于处理复杂的表单提交场景。 10. **国际化支持**:通过消息源(MessageSource)和LocaleResolver,Spring MVC提供了强大的国际化...
Spring MVC提供了方便的文件上传和下载功能,开发者可以通过简单的API来实现复杂的文件操作。 **6. 异常处理** 通过自定义异常处理器,Spring MVC允许优雅地处理运行时异常,提供了统一的错误页面和异常信息。 **7...
- **允许其他MVC实现**:Spring MVC 支持多种不同的 MVC 实现,这为开发者提供了更多的选择性。 - **DispatcherServlet**:这是 Spring MVC 的前端控制器,负责接收 HTTP 请求并分发给合适的后端组件处理。 - **...
配置Spring MVC通常涉及web.xml文件中的DispatcherServlet配置,以及Spring配置文件中定义的Controller、ViewResolver和其他组件。Spring Boot简化了这一过程,通过自动配置和@SpringBootApplication注解可以快速...
以上只是Spring MVC 5.0.3中的一部分关键特性,实际上还有许多其他功能和优化,如国际化、缓存、上传文件等,都极大地提高了开发效率和应用程序的可维护性。在实际项目中,理解并熟练掌握这些知识点,将有助于构建出...
根据提供的文件信息,本文将详细解析如何在Spring MVC框架中实现多附件与文本信息的同时上传功能。这在很多实际应用场景中都非常有用,例如用户在提交表单时常常需要附带图片或其他类型的文件。 ### 一、Spring MVC...
在本项目中,开发者利用Java的Spring MVC框架构建了一个文件上传的接口,该接口能够...通过学习这个项目,开发者可以掌握Spring MVC文件上传的实现,以及Android如何与服务器进行文件交互,进一步提升跨平台开发能力。
- 视图(View):负责渲染模型数据,Spring MVC支持多种视图技术如JSP、FreeMarker、Thymeleaf等。 5. **数据绑定与验证**: - 数据绑定:Spring MVC可以自动将请求参数绑定到Controller方法的参数上。 - 数据...
在本文中,我们将深入探讨如何在Spring MVC框架中实现图片上传功能。Spring MVC是一个流行的Java Web开发框架,它提供了一种模块化的方式来构建Web应用程序,包括处理表单数据和文件上传。在这里,我们重点关注如何...
在Spring MVC框架中,文件上传是一项常见的功能,它允许用户通过Web表单上传文件到服务器。Spring MVC通过集成Apache Commons FileUpload库实现了这一功能。在本文中,我们将深入探讨如何配置和使用Spring MVC进行...
《Expert Spring MVC and Web Flow》这本书还介绍了 Spring MVC 与 Spring Web Flow 的结合使用,Spring Web Flow 是一个用于构建复杂 Web 应用程序的框架,它可以处理复杂的交互式对话流程。 - **Web Flow** 提供...
11. **上传文件** Spring MVC提供`MultipartFile`接口处理文件上传,可以通过`@RequestParam("file") MultipartFile file`接收上传的文件。 12. **RESTful API** Spring MVC非常适合构建RESTful服务,使用`@...
7. **spring-web.jar**:提供了与Web相关的功能,如HTTP上下文、上传文件的支持等。它是Spring MVC的基础之一,使Spring可以与Web应用服务器交互。 8. **jstl.jar**:JavaServer Pages Standard Tag Library,用于...
15. **上传文件**:Spring MVC 使用 `MultipartFile` 类处理文件上传,可以通过 `@RequestParam("file") MultipartFile file` 获取上传的文件。 16. **模板引擎**:除了传统的 JSP,Spring MVC 还支持 Thymeleaf 等...
7. **上传下载支持**:Spring MVC提供方便的API处理文件上传和下载,包括MultipartFile接口和StreamingResponseBody。 8. **RESTful风格的支持**:通过@RequestMapping和HttpMethod注解,可以方便地创建符合REST...
Spring MVC 学习文档资料 Spring MVC 是一个基于 Java 的 Web 框架,提供了一个灵活、可...本文档还涵盖了 Spring MVC 的高级定制、多文件上传、主题、multipart 文件上传、Servlet 容器初始化配置等方面的知识点。
11. **Multipart File Upload**:如果UserTest涉及到文件上传,Spring MVC通过`MultipartFile`接口提供支持,可以方便地处理HTTP请求中的多部分数据。 12. **RESTful API设计**:Spring MVC也支持RESTful风格的API...