`

Spring Upload File 文件上传的使用

阅读更多

Spring Upload method 文件上传

1. org.springframework.web.multipart.commons.CommonsMultipartResolver 包是Spring中用来处理的上传文件的,我们可以将配置在Spring-context.xml或者action-servlet.xml等配置文件,Spring会自己检查每次请求,如果请求中包含上传的form数据,则会利用此包来解析.例如下面配置:

	<!-- upload file -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="maxUploadSize">
			<value>2048000</value>
		</property>
		<property name="maxInMemorySize">
			<value>2048</value>
		</property>
		<property name="defaultEncoding">
			<value>UTF-8</value>
		</property>
	</bean>

 它的设置参数如下:

 void cleanupMultipart(MultipartHttpServletRequest request) 
          Cleanup any resources used for the multipart handling, like a storage for the uploaded files. 
protected  String determineEncoding(HttpServletRequest request) 
          Determine the encoding for the given request. 
 DiskFileUpload getFileUpload() 
          Return the underlying org.apache.commons.fileupload.DiskFileUpload instance. 
 boolean isMultipart(HttpServletRequest request) 
          Determine if the request contains multipart content. 
protected  DiskFileUpload newFileUpload() 
          Initialize the underlying org.apache.commons.fileupload.DiskFileUpload instance. 
 MultipartHttpServletRequest resolveMultipart(HttpServletRequest request) 
          Parse the given HTTP request into multipart files and parameters, and wrap the request inside a MultipartHttpServletRequest object that provides access to file descriptors and makes contained parameters accessible via the standard ServletRequest methods. 
 void setDefaultEncoding(String defaultEncoding) 
          Set the default character encoding to use for parsing requests, to be applied to headers of individual parts and to form fields. 
 void setMaxInMemorySize(int maxInMemorySize) 
          Set the maximum allowed size (in bytes) before uploads are written to disk. 
 void setMaxUploadSize(long maxUploadSize) 
          Set the maximum allowed size (in bytes) before uploads are refused 
 void setServletContext(ServletContext servletContext) 
          Set the ServletContext that this object runs in. 
 void setUploadTempDir(Resource uploadTempDir) 
          Set the temporary directory where uploaded files get stored. 

2. 下来就需要在action来自己处理解析过的文件

    可以来将request转成public interface MultipartHttpServletRequest,这个接口中提供了几个我们方便使用的方法

MultipartFile getFile(String name) 
          Return the contents plus description of an uploaded file in this request, or null if it does not exist. 
 Map getFileMap() 
          Return a Map of the multipart files contained in this request. 
 Iterator getFileNames() 
          Return an Iterator of String objects containing the parameter names of the multipart files contained in this request. 

 

如下:

    public void uploadSDFile(HttpServletResponse response, HttpServletRequest request) throws Exception {
    	 logger.info("upload sdfile action....");
    	 //remove session value for upload vlaue
    	if (request.getSession().getAttribute(Constants.IMPORT_SDF_PARSE_RESULT) != null)
    		 request.getSession().removeAttribute(Constants.IMPORT_SDF_PARSE_RESULT);
    	
    	// upload file
		MultipartHttpServletRequest mhs = (MultipartHttpServletRequest) request;
		MultipartFile mf = mhs.getFile("file");

		// get file
		File inputFile = FilePathHelper.uploadFile(mf, Constants.UPLOAD_SDF);

 取得MultipartFile,可以利用它的实现类org.springframework.web.multipart.commons.CommonsMultipartFile里众多的方法:

byte[] getBytes() 
          Return the contents of the file as an array of bytes. 
 String getContentType() 
          Return the content type of the file. 
 FileItem getFileItem() 
          Return the underlying org.apache.commons.fileupload.FileItem instance. 
 InputStream getInputStream() 
          Return an InputStream to read the contents of the file from. 
 String getName() 
          Return the name of the parameter in the multipart form. 
 String getOriginalFilename() 
          Return the original filename in the client's filesystem. 
 long getSize() 
          Return the size of the file in bytes. 
 String getStorageDescription() 
          Return a description for the storage location of the multipart content. 
protected  boolean isAvailable() 
          Determine whether the multipart content is still available. 
 boolean isEmpty() 
          Return whether the uploaded file is empty, that is, either no file has been chosen in the multipart form or the chosen file has no content. 
 void transferTo(File dest) 
          Transfer the received file to the given destination file. 

 
如下:

public static File uploadFile(MultipartFile mf, String uploadType) throws Exception {
		if (mf.isEmpty() || mf.getSize() <= 0)
			return null;
		CommonsMultipartFile cmf = (CommonsMultipartFile)mf;
		DiskFileItem fileItem = (DiskFileItem) cmf.getFileItem();
		String fileType = StringUtils.substringAfter(fileItem.getName(), ".");
		if (fileType.equalsIgnoreCase(uploadType)) {
			File file = fileItem.getStoreLocation();
			fileItem.write(file);
			return file;
		}
		return null;
	}

 org.apache.commons.fileupload.FileItemDefaultFileItem, DiskFileItem 实现类,里面有很多方法,方便我们使用.

 

需要注意是在form提交时,如果用form套form可能会有问题,解决的方法就是用jquery里面ajaxfileupload.

另外如果使用ajax提交方式的话,最好是用异步提交先将文件上传,解析的文件可以放到session中, 之后在callback函数中判断是否上传成功再做下步文件处理.

 

Note:若出现

2009-4-22 16:38:55 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet action threw exception
java.lang.ClassNotFoundException: org.apache.commons.io.output.DeferredFileOutputStream
 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)

 

是因为缺少一个apache的包:commons-io-1.4.jar  见附件

 

分享到:
评论

相关推荐

    springcloud处理文件上传

    在上面的例子中,`file-upload-service`是提供文件上传服务的微服务的名称,`/upload`是文件上传的API路径。 然后,我们引入Zuul作为API网关。Zuul不仅可以路由请求到正确的服务,还可以添加额外的过滤器来处理特定...

    spring boot file upload

    在Spring Boot框架中,文件上传是一项常见的功能,用于接收客户端发送的文件并将其保存到服务器。这个场景在Web应用中非常普遍,例如用户上传头像、上传文档等。本篇文章将详细探讨Spring Boot如何实现文件上传,...

    Spring MVC文件上传下载

    在Spring MVC中,文件的上传和下载是常见的功能需求,这涉及到客户端与服务器之间的数据传输。本篇文章将深入探讨Spring MVC如何实现文件上传和下载。 ### 文件上传 1. **依赖配置**:在Spring MVC项目中,为了...

    spring-boot-file-upload.zip

    这个名为"spring-boot-file-upload.zip"的压缩包显然与Spring Boot相关,特别是关于文件上传的功能。在Spring Boot中集成文件上传功能,可以帮助开发者实现用户上传文件到服务器的需求,例如在内容管理系统、论坛...

    spring mvc文件上传实现进度条

    这个场景通常涉及到前端的JavaScript或jQuery库(如jQuery File Upload)与后端的Spring MVC控制器之间的交互,以及可能的多线程处理来跟踪文件上传的进度。接下来,我们将深入探讨如何在Spring MVC中实现这一功能。...

    spring 文件上传实例

    在Spring框架中,文件上传是一项常见的功能,尤其在构建Web应用程序时。本实例将深入探讨如何在Java Spring中实现文件上传,并提供一个完整的配置示例。文件上传在现代Web应用中有着广泛的应用,如用户头像上传、...

    spring mvc上传文件

    在本文中,我们将深入探讨如何使用Spring MVC框架与Ajax技术结合来实现文件上传的功能。Spring MVC是Spring框架的一部分,提供了一种模型-视图-控制器(MVC)架构模式,用于构建Web应用程序。Ajax(Asynchronous ...

    spring_boot_file_upload

    标题 "spring_boot_file_upload" 暗示了这个项目或教程是关于在Spring Boot应用中实现文件上传功能的。Spring Boot是Java生态系统中一个流行的微服务框架,它简化了Spring框架的配置,使得开发人员能够快速搭建应用...

    ajaxupload在spring mvc4.2中实现简单文件上传

    前端通常使用JavaScript库如jQuery或专为文件上传设计的库如jQuery Form插件或jQuery File Upload。在本例中,可能使用AjaxUpload库。创建一个HTML表单,添加`enctype="multipart/form-data"`属性以支持文件上传: ...

    spring mvc ajax异步文件的上传和普通文件上传

    在Spring MVC框架中,文件上传是一项常见的功能,无论是普通的文件上传还是通过Ajax实现的异步文件上传,都为用户提供了更好的交互体验。本篇将详细讲解这两种方式的实现原理及步骤。 首先,让我们来理解一下普通...

    spring实现文件上传下载

    使用`@RequestParam("file") MultipartFile file`来接收上传的文件: ```java @Controller @RequestMapping("/upload") public class FileUploadController { @PostMapping("/doUpload") public String ...

    spring_boot_upload_file.rar

    标题 "spring_boot_upload_file.rar" 暗示了这是一个关于Spring Boot中文件上传功能的教程或项目源码压缩包。Spring Boot是Java生态系统中的一个快速开发框架,它简化了Spring应用的初始设置和配置,使得开发者可以...

    spring 文件上传jar包

    使用Spring WebFlux或Spring MVC的Async支持,可以实现文件上传的异步处理,提高系统的响应性能。通过定义`@PostMapping`并返回`DeferredResult`或使用`WebClient`,可以在后台线程中处理文件上传。 10. **最佳...

    JAVA|jQuery-File-Upload多文件上传及拖拽上传

    在Java环境中,通常使用Servlet或者Spring MVC来接收并处理上传的文件。你需要在服务器端创建一个能够处理multipart/form-data类型的请求的处理器,解析请求中的文件并保存到服务器。 1. **多文件上传**:jQuery ...

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

    在Spring框架中,可以使用`@Controller`注解的控制器方法接收文件上传请求。配合`@RequestParam`注解,你可以指定一个`MultipartFile`类型的参数,Spring会自动使用Apache Commons FileUpload进行解析。例如: ```...

    ssm框架--spring mvc实现文件上传

    总的来说,"ssm框架--spring mvc实现文件上传"项目涵盖了Spring MVC的文件上传机制、数据库设计、MyEclipse的使用以及测试实践等多个知识点。理解并掌握这些内容,对于提升Java Web开发能力具有重要意义。

    spring boot 实现文件上传

    在Spring Boot中,通常会使用`@PostMapping`注解来定义处理POST请求的方法,并使用`@RequestParam("file") MultipartFile file`来接收上传的文件。例如: ```java import org.springframework.web.bind.annotation....

    spring上传文件

    在Spring框架中,文件上传是一项常见的功能,尤其在构建Web应用程序时。Spring提供了一套完善的API来处理文件上传,使得开发者能够轻松地实现文件上传功能。以下是对`spring上传文件`这一主题的详细讲解。 首先,...

    Spring文件的上传和下载

    在Spring框架中,文件的上传和下载是常见的功能需求,特别是在构建Web应用程序时。下面将详细阐述如何在Spring中实现这一功能,以及涉及到的关键技术点。 1. **Servlet的注入和使用** 在Spring MVC中,我们通常...

    Spring Boot实现文件上传示例代码

    而对于多文件上传,可以使用`&lt;input type="file" multiple&gt;`: ```html &lt;input type="file" name="files" multiple&gt; &lt;button type="submit"&gt;Upload ``` 在实际开发中,可能还需要考虑文件大小限制、文件类型...

Global site tag (gtag.js) - Google Analytics