`
huangyongxing310
  • 浏览: 495762 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Spring Multipart工作原理(文件上传到服务器)

阅读更多
Multipart工作原理


按照Multipart规定的格式将文件名和文件内容在请求中发送到服务器中

服务器从请求流中得到文件名和文件内容放入到Multipart定义的类中,
服务器处理请求中再在服务器生成相关的文件目录,并将内容保存到服务器中去



Spring applicationContext.xml配置文件:
<bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

    <!-- one of the properties available; the maximum file size in bytes -->
    <property name="maxUploadSize" value="100000"/>
</bean>




单文件方式实现:
HTML:
<form action="http://localhost:8080/v1/TestUploadImage" method="post" id="iconForm" enctype="multipart/form-data">
    <table>
    <tr>
        <td>头像</td>
        <td><input id="iconImg" name="iconImg" type="file"/></td>
        <td><input type="submit" value="上传"/></td>
    </tr>
    </table>
</form>



JAVA:
public static String uploadFile(String uploadDir, MultipartFile file, Boolean existReplace) {
		String logString = "FileIOUtils uploadFile : ";

		String returnMsg = null;

		String fileName = file.getOriginalFilename();
		logger.info(logString + "fileName == " + fileName);

		File targetFile = new File(uploadDir, fileName);
		logger.info(logString + "targetFile == " + targetFile);

		// 文件存在
		if (!targetFile.exists()) {
			logger.info(logString + "targetFile is not exist");
			// 新建文件目录
			targetFile.mkdirs();
		} else {
			logger.info(logString + "targetFile is exist");
			if (!existReplace) {
				logger.info(logString + "existReplace is false");
				returnMsg = "exist";
				return returnMsg; // 存在不进行替换,直接返回true
			}
		}

		// 保存文件
		try {
			file.transferTo(targetFile);
		} catch (Exception e) {
			logger.error(logString + "targetFile save fail == " + e);
			returnMsg = "false";
			return returnMsg;
		}
		returnMsg = "true";
		logger.info(logString + "returnMsg ==  " + returnMsg);
		return returnMsg;
	}
}


方法1:
@RequestMapping(value = "/TestUploadImage", produces = "text/plain;charset=UTF-8")
public @ResponseBody String iconUpload(@RequestParam(value = "iconImg") MultipartFile iconImg,HttpServletRequest request,String aas ){
	MultipartHttpServletRequest multipartRequest  =  (MultipartHttpServletRequest) request;
	String fileName=multipartFile.getOriginalFilename();
	if (fileName==null){
		System.out.println("fileName==null");
	}

	if (fileName==""){
		System.out.println("fileName==''");
	}

	String tempfilename;
	if (System.getProperty("os.name").equals("Linux")) {
		tempfilename = "/opt/mcloudStat/";
	} else {
		tempfilename = "D:\\testImage";
	}

	returnMsg = FileIOUtils.uploadFile(tempfilename,multipartFile,false);
	return returnMsg;
}


方法2:
@RequestMapping(value = "/TestUploadImage", produces = "text/plain;charset=UTF-8")
public @ResponseBody String iconUpload(@RequestParam(value = "iconImg") MultipartFile iconImg,HttpServletRequest request,String aas ){
	MultipartHttpServletRequest multipartRequest  =  (MultipartHttpServletRequest) request;
	Map<String,MultipartFile> fileMap  =multipartRequest.getFileMap();

	String returnMsg = null;
	for(String key:fileMap.keySet()){
		System.out.println("key == " + key);

		if(key.equals("iconImg")){
			MultipartFile multipartFile = fileMap.get(key);

			String fileName=multipartFile.getOriginalFilename();

			if (fileName==null){
				System.out.println("fileName==null");
			}

			if (fileName==""){
				System.out.println("fileName==''");
			}

			System.out.println("fileName == " + fileName);

			String tempfilename;
			if (System.getProperty("os.name").equals("Linux")) {
				tempfilename = "/opt/mcloudStat/";
			} else {
				tempfilename = "D:\\testImage";
			}

			returnMsg = FileIOUtils.uploadFile(tempfilename,multipartFile,false);
		}
	}
	return returnMsg;
}



多文件方式实现:
HTML:
<form action="http://localhost:8080/v1/TestUploadImage" method="post" id="iconForm" enctype="multipart/form-data">
    <table>
    <tr>
        <td>头像</td>
        <td><input id="iconImg" name="iconImg" type="file"/></td>
        <td><input id="iconImg2" name="iconImg" type="file"/></td>//命字要一样,方便组成数组,会与排版顺序进行传入
        <td><input type="submit" value="上传"/></td>
    </tr>
    </table>
</form>



JAVA:
方法1:
@RequestMapping(value = "/TestUploadImage", produces = "text/plain;charset=UTF-8")
public @ResponseBody String iconUpload(@RequestParam(value = "iconImg") MultipartFile[] iconImg,HttpServletRequest request,String aas ){
	String returnMsg = null;
	int iconImgLen = iconImg.length;
	System.out.println("iconImgLen == " +iconImgLen);
	for(int i=0;i<iconImgLen;i++){
		String fileName=iconImg[i].getOriginalFilename();

		if (fileName==null){
			System.out.println("fileName==null");
		}

		if (fileName==""){
			System.out.println("fileName==''");
		}

		System.out.println("fileName == " + fileName);

		String tempfilename;
		if (System.getProperty("os.name").equals("Linux")) {
			tempfilename = "/opt/mcloudStat/";
		} else {
			tempfilename = "D:\\testImage";
		}

	        returnMsg = FileIOUtils.uploadFile(tempfilename,iconImg[i],false);
	}
	return returnMsg;
}



方法2:参考单单文方式实现方法2,不过HTML文件中的name要不一样

thumbnails可实现图片的压缩功能(PictureUtils.java)
http://blog.csdn.net/yaohucaizi/article/details/9718861


分享到:
评论

相关推荐

    spring 文件上传实例

    首先,让我们了解一下Spring中的文件上传工作原理。Spring通过`CommonsMultipartResolver`类来处理multipart/form-data类型的HTTP请求,这是用于上传文件的标准格式。在Spring MVC中,你需要在`DispatcherServlet`的...

    java文件上传到服务器

    在Java Web开发中,文件上传是一项常见的功能,例如将用户选择的图片或其他文件发送到服务器进行存储或处理。本项目采用jsp和servlet技术来实现这个功能,这是一套经典的Web开发模式,非常适合初学者学习和理解。...

    Spring Boot 文件上传原理解析

    Spring Boot 文件上传原理主要涉及到Spring MVC的处理机制。Spring Boot本身并不直接处理文件上传,而是依赖于Spring MVC的组件来完成这项任务。Spring MVC通过一个名为`MultipartResolver`的接口来处理文件上传请求...

    spring学习: spring mvc上传文件方法分析

    在Spring MVC中,文件上传是常见的功能之一,用于接收用户通过表单提交的文件数据。本文将深入探讨Spring MVC中的文件上传方法,并基于提供的“spring学习:spring mvc上传文件方法分析”标题进行详细的解析。 首先...

    SpringMVC文件上传,多文件上传实例

    1. **文件上传原理**: 文件上传是通过HTTP协议的POST请求来完成的,通常使用`multipart/form-data`编码类型。在客户端,HTML表单中的`&lt;input type="file"&gt;`元素允许用户选择本地文件;在服务器端,我们需要解析...

    MultipartHttpServletRequest_文件上传

    通过正确配置和理解其工作原理,开发人员能够轻松地在Web应用中集成文件上传功能,满足各种业务需求。无论是简单的单一文件上传还是复杂的多文件管理,Spring框架都提供了丰富的工具和API来支持这一过程。

    Spring MVC实现文件的上传和下载

    至于“lib”文件,这通常指的是项目依赖的库文件,可能包含了Spring MVC框架本身以及处理文件上传下载所需的相关库,如Apache Commons FileUpload和Apache Commons IO。在Java项目中,这些库通常被打包成JAR文件放入...

    springMVC 文件上传jar文件及源码

    在深入学习Spring MVC文件上传和下载的过程中,理解HTTP协议、表单提交以及Spring MVC的内部工作原理是非常重要的。同时,熟悉相关的API和最佳实践,能够帮助我们构建健壮且安全的文件上传下载功能。

    Spring CommonsMultipartResolver 上传文件

    下面我们将深入探讨`CommonsMultipartResolver`的工作原理及其在Spring MVC中的应用。 1. **CommonsMultipartResolver简介** `CommonsMultipartResolver`是Spring MVC提供的一个实现类,它继承自`Multipart...

    IDEA SpringMVC 实现文件的上传下载

    在SpringMVC中,文件上传主要依赖于`CommonsMultipartResolver`,这是Spring提供的一个解析多部分请求的组件。在配置文件中,我们需要添加如下配置启用文件上传: ```xml ...

    SpringMVC+multipart

    在 Web 开发中,文件上传通常涉及到浏览器与服务器之间的交互。HTML5 引入了 `multipart/form-data` 类型的表单,使得文件可以作为表单数据的一部分发送给服务器。Spring MVC 通过 `CommonsMultipartResolver` 或 `...

    java上传文件到服务器

    如果你正在使用Spring框架,可以利用其对文件上传的便捷支持。`MultipartFile`接口允许你处理上传的文件,而控制器方法可以直接接收这些文件作为参数。Spring会处理所有底层的多部分解析和文件存储。 4. **使用JSF...

    MYECLIPSE AXIS2 + SPRING 文件上传

    【标题】"MYECLIPSE AXIS2 + SPRING 文件上传"所涉及的知识点主要集中在三个核心领域:MYECLIPSE开发环境、AXIS2服务框架和SPRING框架,以及文件上传技术。MYECLIPSE是一款强大的集成开发环境(IDE),常用于Java...

    文件上传(文件上传)

    理解文件上传的工作原理及其在IT领域的应用,对于开发人员来说是必不可少的知识。 首先,我们要了解HTTP协议在文件上传中的角色。HTTP协议是Web通信的基础,但在默认情况下,它并不支持大文件的上传。传统的HTTP...

    文件上传到服务端web小项目

    在IT行业中,文件上传与下载是Web应用中的基础功能,特别是在服务器端处理用户交互时。...了解这些基础知识有助于进一步掌握现代Web框架如Spring Boot、React或Vue.js等在处理文件上传下载时的原理和方法。

    http多文件上传

    "HTTP多文件上传"是指用户能够一次上传多个文件到服务器的技术。本文将深入探讨这个主题,包括其工作原理、实现方式以及相关的技术和挑战。 一、HTTP协议与文件上传 HTTP(超文本传输协议)是互联网上应用最广泛的...

    Java自带的HttpURLConnection访问接口实现文件上传

    文件上传需要将文件内容写入到输出流中。我们创建一个BufferedOutputStream,然后按照多部分/形式数据的格式写入每个字段,包括普通参数和文件。 ```java String boundary = "----WebKitFormBoundary7MA4YWxkTrZu0...

    大文件上传支持断点续传springboot版

    在IT行业中,大文件上传和断点续传是常见的需求,尤其在云存储、文件分享以及数据备份等场景。SpringBoot作为一个轻量级的Java框架,因其简洁的配置和强大的功能,被广泛应用在各种项目中。本项目"大文件上传支持...

    Spring 上传文件

    在Spring框架中,上传文件是一项常见的任务,尤其在构建Web应用程序时。Spring提供了一套强大的MVC(Model-View-...在实际项目中,根据需求可能会有更复杂的情况,如支持多文件上传、文件预览等,但基本原理是一致的。

Global site tag (gtag.js) - Google Analytics