`

springmvc入门基础之文件上传

阅读更多

 接:http://alog2012.iteye.com/admin/blogs/2040214

 一、表单上传

1、引入jar:

  • apache.commons-fileupload-1.3.jar
  • apache.commons.io-2.4.0.jar 

2、修改springmvc配置

<!-- id="multipartResolver"必须是multipartResolver -->
<bean id="multipartResolver"
	class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	<!-- maxUploadSize:文件上传的最大值以byte为单位 -->
	<property name="maxUploadSize" value="1024000"></property>
</bean>

<!-- SpringMVC在超出上传文件限制时,会抛出org.springframework.web.multipart.MaxUploadSizeExceededException -->
<!-- 该异常是SpringMVC在检查上传的文件信息时抛出来的,未进入到Controller方法中 -->
<bean id="exceptionResolver"
	class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
	<property name="exceptionMappings">
		<props>
			<!-- 遇到MaxUploadSizeExceededException异常时,自动跳转到fill_error.jsp页-->
			<prop
				key="org.springframework.web.multipart.MaxUploadSizeExceededException">fill_error</prop>
		</props>
	</property>
</bean>

 3、view层页面 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<!DOCTYPE HTML>
<html>
<head>
<base href="<%=basePath%>">
<title>SpringMVC fileUpload</title>
</head>
<body>
	<form action="test/upload1.do" method="post"
		enctype="multipart/form-data">
		选择文件1:<input type="file" name="files"> <input type="submit"
			value="上传">
	</form>
	<form action="test/upload2.do" method="post"
		enctype="multipart/form-data">
		选择文件2:<input type="file" name="files"> <input type="submit"
			value="上传">
	</form>
</body>
</html>

 4、Controller控制器,接收表单文件 

	/**
	 * 转向file.jsp
	 * 
	 */
	@RequestMapping("/tofile.do")
	public String tofile() {
		return "file";
	}

	/**
	 * 上传文件1
	 */
	@RequestMapping(value = "/upload1.do")
	public String upload1(HttpServletRequest request) throws Exception {
		// 第一步转化request
		MultipartHttpServletRequest rm = (MultipartHttpServletRequest) request;
		// 获得文件
		MultipartFile mfile = rm.getFile("files");
		// 获得文件的字节数组
		byte[] bfile = mfile.getBytes();
		// 获得文件名
		String fileName = mfile.getOriginalFilename();
		System.out.println("fileName:" + fileName + "size:" + bfile.length);
		// 保存文件
		savaFile(bfile, fileName);

		return "jsp1/index";
	}

	/**
	 * 上传文件2
	 */
	@RequestMapping(value = "/upload2.do")
	public String upload2(@RequestParam("files") MultipartFile file)
			throws Exception {
		// 获得文件的字节数组
		byte[] bfile = file.getBytes();
		// 获得文件名
		String fileName = file.getOriginalFilename();
		System.out.println("fileName:" + fileName + "size:" + bfile.length);
		// 保存文件
		savaFile(bfile, fileName);
		return "jsp1/index";
	}

	/**
	 * 将bfile写入c:/fileName
	 * 
	 * @param bfile
	 * @param fileName
	 * @throws Exception
	 */
	private void savaFile(byte[] bfile, String fileName) throws Exception {
		// 定义文件的输出流
		OutputStream out = new FileOutputStream(new File("C:/", fileName));
		out.write(bfile);
		out.flush();
		out.close();
	}

  

二、使用ajaxfileupload上传文件  

1、view层页面,引入js文件,这儿使用了“ajaxfileupload.js

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<!DOCTYPE HTML>
<html>
<head>
<base href="<%=basePath%>">
<title>SpringMVC ajaxFileUpload</title>
<script type="text/javascript" src="js/jquery-1.6.2.js"></script>
<script type="text/javascript" src="js/ajaxfileupload.js"></script>
<script type="text/javascript">
	$("#mybutton").click(function(){
			upload();
	});
	//上传源码
	function upload() {
		$("#myupload").click();
	}
	function uploadFile() {
		var fileName = $("#myupload").val();
		$("#msgdiv p:first").before("您选择的文件为:"+fileName);
		//异步上传文件
		ajaxFileUpload(fileName);
	}
	
	function ajaxFileUpload(fileName){ 
	    //执行上传文件操作的函数  
	    $.ajaxFileUpload({  
	        //处理文件上传操作的服务器端地址(可以传参数)  
	        url:"test/ajaxUpload.do",  
	        secureuri:false,                           //是否启用安全提交,默认为false   
	        fileElementId:'myupload',                 //文件选择框的id属性  
	        dataType:'text',                           //服务器返回的格式,可以是json或xml等  
	        success:function(data, status){            //服务器响应成功时的处理函数  
	        	$("#msgdiv p:first").before(data);
	        },  
	        error:function(data, status, e){ //服务器响应失败时的处理函数  
	        	$("#msgdiv p:first").before(e);
	        }  
	    });  
}  
</script>
</head>
<body>
</body>
<input id="myupload" name="myfiles" type="file" onchange="uploadFile()"/><br>
<button id="mybutton">上传</button><br>
<div id="msgdiv"><p></p></div>
</html>

 注意返回结果中带入了<pre>标签,可以使用如下方法去掉<pre>标签

 //ajaxFileUpload会对服务器响应回来的text内容加上<pre style="....">text</pre>前后缀  
data = data.replace(/<pre.*?>/g, '');  
data = data.replace(/<PRE.*?>/g, '');
data = data.replace("<pre>", '');    
data = data.replace("<PRE>", '');  
data = data.replace("</pre>", ''); 
data = data.replace("</PRE>", '');  

 

2、Controller控制器,

   * 如果只是上传一个文件,则只需MultipartFile类型接收文件,而且无需显式指定@RequestParam注解
   * 如果想上传多个文件,那么这里就要用MultipartFile[]类型来接收文件,且要指定@RequestParam注解
   * 上传多个文件时,前台表单中的所有<input type="file"/>的name属性一致即可,此处为myfiles
   * 否则参数里的myfiles无法获取到所有上传的文件

	/**
	 * 转向ajaxfile.jsp
	 * 
	 */
	@RequestMapping("/toajaxfile.do")
	public String toajaxfile() {
		return "ajaxfile";
	}

	/**
	 * 这里这里用的是MultipartFile[] myfiles参数,<br>
	 * 所以前台就要用<input type="file" name="myfiles"/>
	 */
	@RequestMapping(value = "/ajaxUpload.do")
	public void ajaxUpload(@RequestParam MultipartFile[] myfiles,
			HttpServletRequest request, PrintWriter out) throws IOException {

		/**
		 * 遍历文件,然后处理
		 */
		// 上传文件的原名(即上传前的文件名字)
		String originalFilename = null;
		for (MultipartFile myfile : myfiles) {
			if (myfile.isEmpty()) {
				out.print("您没有选择文件!");
				out.flush();
				return;
			}
			if (myfile.getSize() > 10485760) { // 10485760=10*1024*1024
				out.print("您选择的文件大于了10MB");
				out.flush();
				return;
			}
			// 处理文件
			originalFilename = myfile.getOriginalFilename();
			try {
				// 创建接收的新文件,此处还是保存在C盘
				File savefile = new File("C:/", originalFilename);

				// commons.io.FileUtils类,它会自动判断保存位置是否存在,不存在则自动创建
				FileUtils.copyInputStreamToFile(myfile.getInputStream(),
						savefile);
				// 结果显示回页面
				out.print("上传成功!");
				out.flush();
			} catch (IOException e) {
				e.printStackTrace();
				out.print("文件上传失败" + e.getMessage());
				out.flush();
			}
		}
	}

 

 

 

分享到:
评论

相关推荐

    SpringMVC学习(一)——SpringMVC入门小程序

    在“SpringMVC学习(一)——SpringMVC入门小程序”中,我们首先会接触到SpringMVC的基本概念。这通常包括以下几个核心组件: 1. **DispatcherServlet**:这是SpringMVC的前端控制器,负责接收HTTP请求,并根据配置...

    SpringMVC入门教程

    通过这个SpringMVC入门教程,你将学习到如何搭建SpringMVC环境,创建基本的Controller,处理HTTP请求,以及更高级的功能,如数据绑定、文件上传下载、异常处理和RESTful API设计。这将为你在实际项目中运用SpringMVC...

    SpringMVC新手入门Demo1_1

    每个Demo都对应一个具体的功能点,如简单的HTTP请求处理、表单数据绑定、文件上传下载、分页查询等。通过实践这些例子,你可以更好地理解SpringMVC的工作原理和最佳实践,从而能够独立地创建和维护自己的SpringMVC ...

    SpringMVC入门学习

    需要注意的是,本文所介绍的知识仅是SpringMVC入门的基础,要想掌握更深入的技术和知识,还需要在学习过程中不断实践和查阅更多的专业资料,并进行系统深入的学习。加入交流群,例如JAVA后台学习交流群,可以为学习...

    SpringMVC入门实例

    在实际项目中,我们还可以涉及更多复杂功能,如表单数据绑定、异常处理、国际化、文件上传下载等。同时,结合 Spring Boot,可以进一步简化配置和启动流程,使开发更加高效。学习 SpringMVC 不仅要理解基础概念,还...

    SpringMVC入门项目

    通过这个SpringMVC入门项目,你可以学习到如何搭建SpringMVC环境,编写Controller,配置视图解析,处理表单数据,以及如何实现简单的CRUD操作。随着对SpringMVC的深入理解,你将能够构建更加复杂的Web应用。在实践中...

    springMVC 注解入门例子

    在这个入门例子中,我们将探讨如何使用SpringMVC的注解来实现用户信息的保存和文件上传功能。 首先,让我们了解SpringMVC的核心组件: 1. **DispatcherServlet**:它是SpringMVC的前端控制器,负责接收HTTP请求,...

    springMVC做的小项目,可作为springMVC入门教材

    全注解开发是 SpringMVC 中的一种流行模式,它消除了传统的 XML 配置文件,转而使用 Java 注解来配置组件和服务。例如,`@Controller` 注解标记控制器类,`@RequestMapping` 注解映射 HTTP 请求,`@Autowired` 注解...

    SpringMVC上传图片文件到 腾讯云【2018年最新版】【JavaWeb】

    文件上传基础** 在HTML表单中,我们可以使用`&lt;input type="file"&gt;`来选择本地文件。在Ajax中,可以利用XMLHttpRequest的FormData对象来处理文件上传,避免页面刷新。 **3. 使用Ajax进行异步上传** 前端使用Ajax...

    SpringMVC入门实例及详细讲解

    7. **上传文件与下载支持**:Spring MVC内置了对文件上传的支持,可以方便地处理multipart类型的请求,同时也可以支持文件的下载操作。 8. **国际化与主题支持**:Spring MVC提供本地化和主题功能,可以根据用户的...

    springmvc入门的第一个简单demo(适合小白或者刚刚学习springmvc的同学)

    Spring MVC 是一个基于 Java ...随着学习的深入,你将接触到更多高级特性,如拦截器、模型属性绑定、数据验证、文件上传下载等。Spring MVC 提供了丰富的功能和良好的可扩展性,是开发企业级 Java Web 应用的强大工具。

    SpringMVC快速入门示例

    **SpringMVC快速入门示例** SpringMVC是Spring框架的...本示例只是一个基础的快速入门,实际开发中还需要掌握更多高级特性,如拦截器、上传下载、数据绑定等。希望这个快速入门能帮助你顺利开启SpringMVC的学习之旅。

    非注解Springmvc+spring+hibernate 入门实例

    总的来说,这个入门实例旨在帮助初学者理解如何在没有使用注解的情况下,通过XML配置文件集成SpringMVC、Spring和Hibernate,完成一个简单的Web应用。虽然现在的最佳实践倾向于使用注解和Spring Boot,但理解非注解...

    springmvc学习第一天

    #### 三、SpringMVC入门程序详解 入门程序是理解SpringMVC工作原理的重要途径,主要目的是熟悉SpringMVC的基本流程及其各个组件的作用。 - **非注解的处理器映射器和处理器适配器**:这是SpringMVC早期版本中使用的...

    springMVC笔记

    SpringMVC框架提供了强大的功能来支持开发者更方便地处理HTTP请求,包括请求参数的绑定、数据校验、文件上传、异常处理等高级特性。熟练掌握SpringMVC的知识对于开发高质量的Web应用是必不可少的。

    springmvc第一天课堂笔记.docx

    - **文件上传**:支持多文件上传功能。 - **JSON数据交互**:支持通过JSON格式进行数据交互。 - **RESTful支持**:支持RESTful风格的URL。 - **拦截器**:提供了一种机制可以在请求被处理之前或之后做一些预处理或后...

    Maven+SpringMVC+mybatis整合入门Demo

    5. **文件上传功能**:在SpringMVC中,文件上传可以通过`CommonsMultipartResolver`实现。用户选择文件后,文件会被转化为MultipartFile对象,Controller接收这个对象,然后将其存储到服务器的指定位置。这个过程...

    springmvc模式入门

    - 文件上传下载:使用`MultipartFile`处理文件上传,`ResponseEntity`处理文件下载。 - 异步处理:使用`@Async`实现异步方法,提高系统性能。 - 国际化:通过`Accept-Language`头实现多语言支持。 总之,SpringMVC...

    SpringMVC 基础知识

    - **上传图片**:SpringMVC支持文件上传,可以处理用户上传的图片。 - **JSON数据交互**:通过`@ResponseBody`和JSON库,SpringMVC能够轻松地进行JSON数据的交换,适用于前后端分离的开发模式。 - **RESTful支持**:...

Global site tag (gtag.js) - Google Analytics