<form id="uploadFile" enctype="multipart/form-data"> <input type="file" multiple="multiple" data-default-file="" data-max-file-size="3M"/> </form>
Spring如何获取form中上传的文件呢,Servlet3.0之前的版本,和Servlet3.0是有差别的
请看这段注释
/** * Standard implementation of the {@link MultipartResolver} interface, * based on the Servlet 3.0 {@link javax.servlet.http.Part} API. * To be added as "multipartResolver" bean to a Spring DispatcherServlet context, * without any extra configuration at the bean level (see below). * * <p><b>Note:</b> In order to use Servlet 3.0 based multipart parsing, * you need to mark the affected servlet with a "multipart-config" section in * {@code web.xml}, or with a {@link javax.servlet.MultipartConfigElement} * in programmatic servlet registration, or (in case of a custom servlet class) * possibly with a {@link javax.servlet.annotation.MultipartConfig} annotation * on your servlet class. Configuration settings such as maximum sizes or * storage locations need to be applied at that servlet registration level; * Servlet 3.0 does not allow for them to be set at the MultipartResolver level. * * @author Juergen Hoeller * @since 3.1 */
org.springframework.web.multipart.support.StandardServletMultipartResolver
Servlet3.0及以后,可以用这个StandardServletMultipartResolver来处理上传文件
org.springframework.web.multipart.commons.CommonsMultipartResolver
而3.0之前的版本通常用的是CommonsMultipartResolver来处理
这两者有什么区别呢,新版是基于Servlet3.0的API实现的,旧版是基于Apache Commons FileUpload实现的
两者使用的时候配置也是不同的,老版的CommonsMultipartResolver可以在用的时候配置,而新版的StandardServletMultipartResolver必须在注册Servlet的时候就进行配置。
CommonsMultipartResolver resolver = new CommonsMultipartResolver(); resolver.setMaxInMemorySize(maxInMemorySize); resolver.setMaxUploadSize(maxUploadSize); resolver.setDefaultEncoding(defaultEncoding); resolver.setUploadTempDir(uploadTempDir);
基于Apache Commons FileUpload的CommonsMultipartResolver的相关配置网上有很多
通常可以在MultipartResolver的级别进行配置
* In order to use Servlet 3.0 based multipart parsing, * you need to mark the affected servlet with a "multipart-config" section in * {@code web.xml}, or with a {@link javax.servlet.MultipartConfigElement} * in programmatic servlet registration, or (in case of a custom servlet class) * possibly with a {@link javax.servlet.annotation.MultipartConfig} annotation * on your servlet class. Configuration settings such as maximum sizes or * storage locations need to be applied at that servlet registration level; * Servlet 3.0 does not allow for them to be set at the MultipartResolver level.
但是基于Servlet3.0的API实现的StandardServletMultipartResolver需要在web.xml或者在配置Servlet的时候进行配置,不允许在MultipartResolver的级别进行配置。
你可以在注册Servlet的时候加入一个javax.servlet.MultipartConfigElement来进行配置,或者使用javax.servlet.annotation.MultipartConfig注解在servlet类中进行配置。
比如这样:
ServletRegistration.Dynamic registration = container.addServlet("dispatcher", dispatcherServlet); MultipartConfigElement config = new MultipartConfigElement(BaseConst.UPLOAD_FOLDER, 8000L, 8000L, 0); registration.setMultipartConfig(config); registration.setLoadOnStartup(1); registration.addMapping("/");
配置了上传文件最大不超过8Kb
import org.springframework.web.multipart.MultipartResolver; import org.springframework.web.multipart.support.StandardServletMultipartResolver;
@Bean public MultipartResolver multipartResolver(){ StandardServletMultipartResolver resolver = new StandardServletMultipartResolver(); return resolver; }
配置完后在ApplicationContext中实例化一个StandardServletMultipartResolver就可以了
@Service("getUploadFile") public class GetUploadFile { @Autowired private MultipartResolver multipartResolver; public void handleUploadFile(HttpServletRequest request) { MultipartHttpServletRequest multipartRequest = multipartResolver.resolveMultipart(request); multipartRequest.getFileNames().forEachRemaining(name -> { MultipartFile file = multipartRequest.getFile(name); file.getInputStream();//do something file.getBytes();//do something }); } }
这是使用的例子,非常方便,新老版本没什么区别。
import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.MultipartResolver; @Service("getUploadFile") public class GetUploadFile<T> implements IGetUploadFile<T> { @Autowired private MultipartResolver multipartResolver; @Override public List<T> getUploadFile(HttpServletRequest request, IMultipartFileHandler<T> handler) { MultipartHttpServletRequest multipartRequest = multipartResolver .resolveMultipart(request); List<T> uploadFiles = new ArrayList<>(); multipartRequest.getFileNames().forEachRemaining(name -> { MultipartFile file = multipartRequest.getFile(name); T entity = handler.handle(file); uploadFiles.add(entity); }); return uploadFiles; } }
import java.util.List; import javax.servlet.http.HttpServletRequest; public interface IGetUploadFile<T> { /** * get upload files and process * return the result list * as the process method being offered: IMultipartFileHandler<T> * @param request * @param handler * @return */ public List<T> getUploadFile(HttpServletRequest request, IMultipartFileHandler<T> handler); }
import org.springframework.web.multipart.MultipartFile; @FunctionalInterface public interface IMultipartFileHandler<T> { public T handle(MultipartFile file); }
封装成接口来使用,代码更简洁,更易读。
@Autowired private IGetUploadFile<T> iGetUploadFile;
只需注入一下,就可以复用代码,获取上传的文件了。
以上
相关推荐
1. **文件大小限制**:根据业务需求,你可以调整`CommonsMultipartResolver`中的`maxUploadSize`以限制上传文件的大小。 2. **文件类型检查**:在Controller中检查文件类型,只允许特定类型的文件上传。 3. **错误...
`@RequestParam("file") MultipartFile file`注解表示从请求中获取名为"file"的文件参数。 3. **前端HTML表单**: 创建一个HTML表单,使用`enctype="multipart/form-data"`指定文件上传类型: ```html ...
-- 设置最大上传文件大小 --> ``` 3. **控制器方法**:创建一个处理文件上传的控制器方法,接收`MultipartFile`类型的参数,例如: ```java @PostMapping("/upload") public String handleFileUpload(@...
考虑到安全性,应限制上传文件的大小和类型,防止DoS攻击。同时,对于大型文件,可以考虑分块上传,以减轻服务器压力。 通过以上步骤,我们可以在Spring MVC中实现文件上传并显示进度。这个功能可以显著提高用户...
在Spring中,`MultipartFile`接口用于表示上传的文件。它提供了读取文件名、大小、内容类型以及获取文件内容的方法。例如,你可以通过`MultipartFile.getBytes()`获取文件的字节数组。 二、Controller层处理 在...
`IOUtils`类则包含了读取和关闭流的通用方法,对于处理上传文件时生成的临时文件和输入流非常有用。 Apache Commons FileUpload则是专门用来处理HTTP请求中的多部分(multipart)数据,也就是文件上传的。在HTTP...
以下是对`spring上传文件`这一主题的详细讲解。 首先,我们需要理解Spring MVC是Spring框架的一部分,它专门用于构建Web应用程序。在Spring MVC中,文件上传主要依赖于`CommonsMultipartResolver`,这是一个基于...
这个“spring 文件上传jar包”集合可能包含了处理文件上传所必需的各种依赖库,这些库能够帮助开发者轻松地在Spring MVC应用中实现文件上传的功能。下面我们将深入探讨Spring框架中的文件上传以及相关的知识点。 1....
通过这个接口,我们可以读取上传文件的内容、获取文件名、大小等信息,并将其保存到服务器。 在实际应用中,我们通常会创建一个表单来让用户选择要上传的文件。表单需要设置`enctype="multipart/form-data"`属性,...
- 文件大小限制:为了避免过大文件导致服务器资源耗尽,应设置上传文件大小的最大限制。 - 文件类型检查:确保上传的文件类型符合预期,防止恶意文件上传。 - 文件重命名:上传后的文件应进行重命名,防止路径...
文件上传是web应用程序中的一种常见功能,允许用户上传文件到服务器端以供后续处理。 Spring框架提供了多种方式来实现文件上传,包括使用MultipartFile接口、使用Servlet API等。在本文中,我们将主要介绍基于Spring...
这样,你可以在应用配置中设定最大上传文件大小。 3. 集成Struts和Spring的文件上传: 当Struts和Spring一起使用时,文件上传的处理通常在Action类中完成,这里需要集成Spring的`@Autowired`注解和Struts的`...
Struts 通过将 HTML 表单中的 `file` 输入类型映射到 `ActionForm` 中的 `FormFile` 类型属性,从而获取上传的文件数据。文件上传页面(如图 3)通常包含一个文件选择框和提交按钮。 **文件下载** 文件下载则通过...
在Spring框架中,文件上传是常见的业务需求,例如导入Excel数据到系统中进行处理。这里我们探讨的主题是“spring文件上传代码”,这涉及到Spring MVC如何处理文件上传请求,以及如何实现通用的Excel导入功能。我们将...
-- 指定最大上传文件大小,单位为MB --> <property name="maxUploadSize" value="10485760" /> <!-- 10MB --> ``` 2. 创建上传控制器:在Spring MVC中,我们需要创建一个Controller,定义一个处理文件上传的请求...
这里设置了一个最大上传文件大小为10MB,可以根据实际需求调整。 3. **处理文件上传的Controller** 在Controller层,我们需要定义一个处理文件上传的处理方法。使用`@RequestParam("filename") MultipartFile ...
在`handleFileUpload`方法中,可以从`MultipartHttpServletRequest`中获取上传的文件: ```java public String handleFileUpload(MultipartHttpServletRequest request) { Map, MultipartFile> files = request....
在IT行业中,尤其是在Web开发领域,获取上传文件的流是一个重要的操作。这通常涉及到处理用户通过表单上传的文件,例如图片、文档或其他类型的二进制数据。在本篇文章中,我们将深入探讨如何在不同的编程语言和框架...
### Java Spring Boot应用程序中实现文件上传和下载功能 在现代Web开发中,文件上传与下载是常见的需求之一。Spring Boot框架提供了简洁的方式帮助开发者轻松实现这些功能。本文将详细介绍如何在Spring Boot项目中...