`
NeverFlyAway
  • 浏览: 69508 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
阅读更多

 

<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
0
分享到:
评论

相关推荐

    spring mvc上传文件

    1. **文件大小限制**:根据业务需求,你可以调整`CommonsMultipartResolver`中的`maxUploadSize`以限制上传文件的大小。 2. **文件类型检查**:在Controller中检查文件类型,只允许特定类型的文件上传。 3. **错误...

    spring 文件上传实例

    `@RequestParam("file") MultipartFile file`注解表示从请求中获取名为"file"的文件参数。 3. **前端HTML表单**: 创建一个HTML表单,使用`enctype="multipart/form-data"`指定文件上传类型: ```html ...

    Spring MVC文件上传下载

    -- 设置最大上传文件大小 --&gt; ``` 3. **控制器方法**:创建一个处理文件上传的控制器方法,接收`MultipartFile`类型的参数,例如: ```java @PostMapping("/upload") public String handleFileUpload(@...

    spring mvc 上传文件显示进度

    考虑到安全性,应限制上传文件的大小和类型,防止DoS攻击。同时,对于大型文件,可以考虑分块上传,以减轻服务器压力。 通过以上步骤,我们可以在Spring MVC中实现文件上传并显示进度。这个功能可以显著提高用户...

    Spring 文件上传

    在Spring中,`MultipartFile`接口用于表示上传的文件。它提供了读取文件名、大小、内容类型以及获取文件内容的方法。例如,你可以通过`MultipartFile.getBytes()`获取文件的字节数组。 二、Controller层处理 在...

    Spring文件上传和下载所需的jar包.rar

    `IOUtils`类则包含了读取和关闭流的通用方法,对于处理上传文件时生成的临时文件和输入流非常有用。 Apache Commons FileUpload则是专门用来处理HTTP请求中的多部分(multipart)数据,也就是文件上传的。在HTTP...

    spring上传文件

    以下是对`spring上传文件`这一主题的详细讲解。 首先,我们需要理解Spring MVC是Spring框架的一部分,它专门用于构建Web应用程序。在Spring MVC中,文件上传主要依赖于`CommonsMultipartResolver`,这是一个基于...

    spring 文件上传jar包

    这个“spring 文件上传jar包”集合可能包含了处理文件上传所必需的各种依赖库,这些库能够帮助开发者轻松地在Spring MVC应用中实现文件上传的功能。下面我们将深入探讨Spring框架中的文件上传以及相关的知识点。 1....

    Java Spring文件上传,Java文件上传,Java通用文件上传

    通过这个接口,我们可以读取上传文件的内容、获取文件名、大小等信息,并将其保存到服务器。 在实际应用中,我们通常会创建一个表单来让用户选择要上传的文件。表单需要设置`enctype="multipart/form-data"`属性,...

    java 上传文件,实时获取上传进度.

    - 文件大小限制:为了避免过大文件导致服务器资源耗尽,应设置上传文件大小的最大限制。 - 文件类型检查:确保上传的文件类型符合预期,防止恶意文件上传。 - 文件重命名:上传后的文件应进行重命名,防止路径...

    基于Spring实现文件上传功能

    文件上传是web应用程序中的一种常见功能,允许用户上传文件到服务器端以供后续处理。 Spring框架提供了多种方式来实现文件上传,包括使用MultipartFile接口、使用Servlet API等。在本文中,我们将主要介绍基于Spring...

    struts+spring文件上传大小限制.rar

    这样,你可以在应用配置中设定最大上传文件大小。 3. 集成Struts和Spring的文件上传: 当Struts和Spring一起使用时,文件上传的处理通常在Action类中完成,这里需要集成Spring的`@Autowired`注解和Struts的`...

    spring+struts+hibernate实现文件的上传和下载

    Struts 通过将 HTML 表单中的 `file` 输入类型映射到 `ActionForm` 中的 `FormFile` 类型属性,从而获取上传的文件数据。文件上传页面(如图 3)通常包含一个文件选择框和提交按钮。 **文件下载** 文件下载则通过...

    spring文件上传代码

    在Spring框架中,文件上传是常见的业务需求,例如导入Excel数据到系统中进行处理。这里我们探讨的主题是“spring文件上传代码”,这涉及到Spring MVC如何处理文件上传请求,以及如何实现通用的Excel导入功能。我们将...

    spring实现文件上传下载

    -- 指定最大上传文件大小,单位为MB --&gt; &lt;property name="maxUploadSize" value="10485760" /&gt; &lt;!-- 10MB --&gt; ``` 2. 创建上传控制器:在Spring MVC中,我们需要创建一个Controller,定义一个处理文件上传的请求...

    Spring CommonsMultipartResolver 上传文件

    这里设置了一个最大上传文件大小为10MB,可以根据实际需求调整。 3. **处理文件上传的Controller** 在Controller层,我们需要定义一个处理文件上传的处理方法。使用`@RequestParam("filename") MultipartFile ...

    Spring文件的上传和下载

    在`handleFileUpload`方法中,可以从`MultipartHttpServletRequest`中获取上传的文件: ```java public String handleFileUpload(MultipartHttpServletRequest request) { Map, MultipartFile&gt; files = request....

    获取上传文件的流

    在IT行业中,尤其是在Web开发领域,获取上传文件的流是一个重要的操作。这通常涉及到处理用户通过表单上传的文件,例如图片、文档或其他类型的二进制数据。在本篇文章中,我们将深入探讨如何在不同的编程语言和框架...

    Java Spring Boot应用程序中实现文件上传和下载功能

    ### Java Spring Boot应用程序中实现文件上传和下载功能 在现代Web开发中,文件上传与下载是常见的需求之一。Spring Boot框架提供了简洁的方式帮助开发者轻松实现这些功能。本文将详细介绍如何在Spring Boot项目中...

Global site tag (gtag.js) - Google Analytics