`
eric.zhang
  • 浏览: 127278 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Springmvc3实现文件上传

阅读更多
Spring自己封装了文件上传功能,可以利用
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;
MultipartFile multFile = multiRequest.getFile("imgFile");

需要在springmvc-servlet.xml里配置:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />

结合iframe实现局部刷新上传

代码:

1.JSP页面:
<form:form method="post" action="${ctx}/wzxxfbpdtp/save" target="hidden_frame" id="pdtpNewForm" enctype="multipart/form-data" modelAttribute="wzXxfbPdtp">
		<div class="pageContent" layoutH="30">
		<div class="pageFormContent" align="center" style="overflow: hidden;">
			<input type="hidden" name="imgPath" id="imgPath" />
			<table align="center" width="500px" height="300px" border="0" cellpadding="0" cellspacing="0" style="margin-top: 10px;text-align: center;border-spacing: 10px;">
				
				
				<tr>
					<td width="70px">选择图片</td>
					<td colspan="2"><input id="imgFile" name="imgFile" type="file" /></td>
				</tr>
			</table>
		</div>
		</div>
		<iframe name="hidden_frame" id="hidden_frame" src="message.html" style="display:none"></iframe>
		
	</form:form>


2 controller后台:

/** 保存新增,@Valid标注spirng在绑定对象时自动为我们验证对象属性并存放errors在BindingResult  */
	@RequestMapping(value = "/save")
	public String create(ModelMap model,@Valid WzXxfbPdtp wzXxfbPdtp,HttpServletRequest request,HttpServletResponse response)throws Exception  {
		MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;
		MultipartFile multFile = multiRequest.getFile("imgFile");
		// 扩展名格式:
		String extName = "";
		String message = "";
		String newName = "";
		boolean flag = true;
		//取得上传的文件名
		String fileName = multFile.getOriginalFilename();
		if(fileName != null && !"".equals(fileName.trim())){
			//上传文件的大小
			long size = multFile.getSize();
			if(size > (1024*1024)){
				message = "只允许上传1M之内的图片";
				flag = false;
			}
			if (fileName.lastIndexOf(".") >= 0) {
				extName = fileName.substring(fileName.lastIndexOf("."));
			}
			//定义允许上传的文件类型
			List<String> fileTypes = new ArrayList<String>();
			fileTypes.add(".jpg");
			fileTypes.add(".jpeg");
			fileTypes.add(".gif");
			fileTypes.add(".png");
			if(!fileTypes.contains(extName.toLowerCase())){
				message = "只允许上传jpg,jpeg,gif,png格式的图片";
				flag = false;
			}
			String root=request.getSession().getServletContext().getRealPath("");
			String savePath = root+File.separator+"pdtpFolder"+File.separator;
			File f1 = new File(savePath);
			if (!f1.exists()) {
				f1.mkdirs();
			}
			if(flag){
				DateFormat df = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ssSSS");
				Calendar calendar = Calendar.getInstance();
				//以当前时间为文件名 格式如:2011-09-03-19-30-36047 
				newName = df.format(calendar.getTime());
				//newName = UUID.randomUUID().toString();
				File newFile = new File(savePath + newName + extName);
				try {
					multFile.transferTo(newFile);
				} catch (IllegalStateException e) {
					e.printStackTrace();
					flag = false;
				} catch (IOException e) {
					e.printStackTrace();
					flag = false;
				}
				//设置图片的相对地址
				wzXxfbPdtp.setTpdz("pdtpFolder/"+newName+extName);
				//图片原名称
				wzXxfbPdtp.setTpmc(fileName);
				//设置ID与新生成的图片名
				wzXxfbPdtp.setPkid(newName);
				wzXxfbPdtpManager.save(wzXxfbPdtp);
			}
		}
//		dwzCallback(model,CREATED_SUCCESS);
		response.setContentType("text/html");
		response.setCharacterEncoding("utf-8");
		PrintWriter out = response.getWriter();
		out.write("<script>parent.callback('"+flag+"','"+message+"')</script>");
//		return LIST_ACTION;
		return null;
	}


3 springmvc-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-2.5.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"
    default-autowire="byName"   >

	<!-- 开启支持@NumberFormat @DateTimeFormat @Valid标注 ,@DateTimeFormat用于bean 日期属性的格式化,请查看: http://static.springsource.org/spring/docs/3.0.2.RELEASE/spring-framework-reference/htmlsingle/spring-framework-reference.html#mvc-config-->
    <mvc:annotation-driven validator="validator"/>

	<!-- 自动搜索@Controller标注的类 -->
	<context:component-scan base-package="com.**.controller"/>
	
	<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
		<!-- 拦截器注册 -->
		<property name="interceptors">
			<bean class="javacommon.springmvc.interceptor.SharedRenderVariableInterceptor"/>
		</property>
	</bean>

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
	
    <!-- 根据客户端的不同的请求决定不同的view进行响应, 如 /blog/1.json /blog/1.xml -->
    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
    	<property name="ignoreAcceptHeader" value="true"/>
		<property name="defaultContentType" value="text/html"/>
		
    	<!-- 扩展名至mimeType的映射,即 /user.json => application/json -->
		<property name="mediaTypes">
			<map>
				<entry key="json" value="application/json" />
				<entry key="xml" value="application/xml" />
			</map>
		</property>
		<!-- 用于开启 /userinfo/123?format=json 的支持 -->
		<property name="favorParameter" value="true"/>
		<property name="viewResolvers">
			<list>
				<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
			    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
			        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
			        <property name="prefix" value="/pages"/>
			        <property name="suffix" value=".jsp"/>
			    </bean>
			</list>
		</property>
		<property name="defaultViews">
			<list>
				<!-- for application/json -->
				<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
				<!-- for application/xml -->
				<!-- 
				<bean class="org.springframework.web.servlet.view.xml.MarshallingView" >
					<property name="marshaller">
						<bean class="org.springframework.oxm.xstream.XStreamMarshaller"/>
					</property>
				</bean>
				 -->
			</list>
		</property>
    </bean>
    
    <!-- Mapping exception to the handler view -->
    <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="exceptionMappings">
            <props>
            </props>
        </property>
    </bean>
        
</beans>






###############################################################
使用DiskFileItemFactory 及ServletFileUpload 组件进行上传
需要注意的是:所有的Form表单数据不再会自动绑定赋值,需要手动去设置值,还有就是不需要在springmvc-servlet.xml里配置:<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />

后台处理类:

@Controller
@RequestMapping("/wzxxfbpdtp")
public class WzXxfbPdtpController extends BaseRestSpringController<WzXxfbPdtp,java.lang.String>{
//默认多列排序,example: username desc,createTime asc
	protected static final String DEFAULT_SORT_COLUMNS = ""; 
	private WzXxfbPdtpManager wzXxfbPdtpManager;
	private final String LIST_ACTION = "redirect:/wzxxfbpdtp/manager";
	/** 
	 * 增加setXXXX()方法,spring就可以通过autowire自动设置对象属性,注意大小写
	 **/
	public void setWzXxfbPdtpManager(WzXxfbPdtpManager manager) {
		this.wzXxfbPdtpManager = manager;
	}
		String extName = "";
		String message = "";
		boolean flag = true;
		Iterator<FileItem> it = fileList.iterator();
		while (it.hasNext()) {
			FileItem item = it.next();
			//给取表单域的值,赋给wzXxfbPdtp对象
			setFormFields(wzXxfbPdtp, item);
			// 如果是文件类型字段
			if (!item.isFormField()) {
				name = item.getName();
				long size = item.getSize();
				if(size>(1024*1024)){
					message="文件"+item.getName()+"大超过了1M,上传失败!";
					json.put("statusCode", "300");
					json.put("message", message);
					flag = false;
					break;
				}
				// 扩展名格式:
				if (name.lastIndexOf(".") >= 0) {
					extName = name.substring(name.lastIndexOf("."));
				}
				// 定义允许上传的文件类型
				List<String> fileTypes = new ArrayList<String>();
				fileTypes.add(".jpg");
				fileTypes.add(".jpeg");
				fileTypes.add(".gif");
				fileTypes.add(".png");
				if(!fileTypes.contains(extName.toLowerCase())){
					message = "只允许上传jpg,jpeg,gif,png格式的图片";
					json.put("statusCode", "300");
					json.put("message", message);
					flag = false;
					break;
				}
				if(flag) {
					DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ssSSS");
					Calendar calendar2 = Calendar.getInstance();
					//以当前时间为文件名 格式如:2011-09-03-19-30-36047 
					newName = df2.format(calendar2.getTime());
					File newFile = new File(savePath+"/"+folderName+"/" + newName + extName);
					item.write(newFile);
					//设置图片的相对地址
					wzXxfbPdtp.setTpdz(rootFile.getName()+"/"+folderName+"/"+newName+extName);
					//图片原名称
					wzXxfbPdtp.setTpmc(name);
				} 
			}
		}
		if(flag){
			wzXxfbPdtpManager.save(wzXxfbPdtp);
			json.put("navTabId", "BM01040000");
			json.put("statusCode", "200");
			json.put("callbackType", "closeCurrent");
			json.put("message", CREATED_SUCCESS);
		}
		response.setContentType("text/html");
		response.setCharacterEncoding("utf-8");
		PrintWriter out = response.getWriter();
		out.write(json.toString());
		out.flush();
		out.close();
		return null;
	}
/*
	 * 取得Form表单各文本域的值,赋给wzXxfbPdtp对象
	 */
	private void setFormFields(WzXxfbPdtp wzXxfbPdtp, FileItem item) throws UnsupportedEncodingException {
		if(item.isFormField()){
			String field = item.getFieldName();
			String temp;
			if(field.equals("zzdm")){
				temp = item.getString("utf-8");
				wzXxfbPdtp.setZzdm(temp);
			}
			if(field.equals("zzjc")){
				temp = item.getString("utf-8");
				wzXxfbPdtp.setZzjc(temp);
			}
			if(field.equals("bmdm")){
				temp = item.getString("utf-8");
				wzXxfbPdtp.setBmdm(temp);
			}
			if(field.equals("bmjc")){
				temp = item.getString("utf-8");
				wzXxfbPdtp.setBmjc(temp);
			}
			if(field.equals("tpbt")){
				temp = item.getString("utf-8");
				wzXxfbPdtp.setTpbt(temp);
			}
			if(field.equals("tplj")){
				temp = item.getString("utf-8");
				wzXxfbPdtp.setTplj(temp);
			}
			if(field.equals("kd")){
				temp = item.getString("utf-8");
				wzXxfbPdtp.setKd(Integer.parseInt(temp));
			}
			if(field.equals("gd")){
				temp = item.getString("utf-8");
				wzXxfbPdtp.setGd(Integer.parseInt(temp));
			}
			if(field.equals("sfpd")){
				temp = item.getString("utf-8");
				wzXxfbPdtp.setSfpd(temp);
			}
		}
	}
	
//删除本地图片文件
	private void deleteLocalFile(HttpServletRequest request, WzXxfbPdtp pdtp) {
		String	path = pdtp.getTpdz();
		String	root = request.getSession().getServletContext().getRealPath("");
		File rootFile =  new File(root);
		//得到图片存放的完整路径

		String savePath = rootFile.getParent()+ConstantUtils.getFilePath()+"/"+path;
		File f1 = new File(savePath);
		if(f1.exists()){
			f1.delete();
		}
	}


页面显示跟上图一样
  • 大小: 64.7 KB
分享到:
评论
1 楼 zhouylf 2013-04-19  
文章都还行,就是变量名起的好恶心,“wzXxfbPdtp”还不如用汉字做变量名呢

相关推荐

    基于springmvc实现文件上传下载 基于AOP的日志功能

    基于springmvc实现文件上传下载 基于AOP的日志功能基于springmvc实现文件上传下载 基于AOP的日志功能基于springmvc实现文件上传下载 基于AOP的日志功能基于springmvc实现文件上传下载 基于AOP的日志功能基于...

    IDEA SpringMVC 实现文件的上传下载

    在SpringMVC框架中,实现文件的上传与下载是常见的需求。IntelliJ IDEA作为流行的Java开发集成环境,为开发者提供了高效便捷的开发体验。在这个项目中,我们使用IDEA来构建一个基于SpringMVC的系统,实现了文件的...

    JavaEE企业级开发-----SpringMVC实现 文件的上传下载实验报告.docx

    本实验报告将详细阐述如何利用SpringMVC实现文件上传与下载的功能。 首先,文件上传的核心在于HTML表单(form)的正确配置。在创建用于上传文件的表单时,需要指定`enctype`属性为`multipart/form-data`。这是因为...

    Spring下的子框架SpringMVC实现单个文件上传功能

    在开始实现文件上传功能之前,我们需要做一些准备工作,包括添加必要的依赖、配置文件上传解析器等。 ##### 1. 添加依赖 为了支持文件上传,首先需要在项目的构建文件(如`pom.xml`或`build.gradle`)中添加`...

    SpringMVC框架实现文件的上传和下载

    在处理文件上传和下载时,SpringMVC通过`@RequestParam`注解接收前端传递的文件数据,通过`HttpServletResponse`对象来发送文件内容给客户端。 **文件上传** 1. **配置SpringMVC** 在SpringMVC的配置文件中,我们...

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

    在这个“SpringMVC文件上传,多文件上传实例”中,我们将深入探讨如何在SpringMVC环境中实现文件上传功能,包括单个文件上传以及多个文件的批量上传。 1. **文件上传原理**: 文件上传是通过HTTP协议的POST请求来...

    SpringMVC+Ajax异步文件上传

    在本教程中,我们将探讨如何结合`SpringMVC`和`Ajax`来实现异步文件上传,并讨论短视频背景以及`a`标签绑定文件域的相关知识。 1. **SpringMVC中的文件上传** - **MultipartFile接口**:`SpringMVC`提供了一个名为...

    webuploader+springMVC实现大文件上传.zip

    总的来说,这个项目展示了如何结合WebUploader和SpringMVC实现高效、可靠的大文件及多文件上传功能,为开发者提供了一个实用的参考示例。通过学习和理解这些知识点,开发者可以构建自己的文件上传系统,满足各种复杂...

    springmvc框架的文件上传 下载

    在这个项目"springmvc框架的文件上传 下载"中,你可能会遇到如404错误等常见问题,下面将详细介绍SpringMVC中文件上传和下载的实现及其可能遇到的问题。 **文件上传** 1. **配置**: 首先,你需要在`dispatcher-...

    SpringMVC 实现文件上传下载、国际化等

    本教程将深入讲解如何利用SpringMVC实现文件上传和下载功能,以及如何实现应用的国际化。下面我们将详细探讨这些知识点。 **一、SpringMVC文件上传** 在SpringMVC中,文件上传主要依赖于`CommonsMultipartResolver...

    springmvc上传文件controller,vue

    Vue.js作为一个前端框架,可以很好地与Spring MVC结合,实现用户界面的交互和文件上传的处理。在这个项目中,我们将深入探讨如何使用Spring MVC作为后端控制器来处理文件上传,以及Vue.js在前端如何与之配合。 首先...

    springmvc+hadoop+maven实现文件上传至hdfs

    在本项目中,我们结合了SpringMVC、Hadoop和Maven这三个技术,构建了一个能够实现文件从Web端上传到HDFS(Hadoop Distributed File System)的系统。下面将详细阐述这三个技术及其在项目中的应用。 首先,SpringMVC...

    springmvc实现上传文件到七牛云

    在本项目中,我们利用 SpringMVC 实现了文件上传的功能,并将这些文件存储到七牛云存储服务上。 首先,我们需要了解 SpringMVC 中的文件上传机制。在 SpringMVC 中,文件上传是通过 `CommonsMultipartResolver` ...

    springMVC实现多文件上传需要的jar

    这里,我们主要关注"springMVC多文件上传需要的jar"这一资源,它包含了实现这一功能所必需的Java档案(JAR)文件。 首先,Spring MVC是Spring框架的一个模块,专门处理Web应用的请求和响应。它提供了模型-视图-控制...

    SpringMVC框架实现文件的上传和下载.rar.rar

    以上就是使用SpringMVC实现文件上传和下载的基本步骤。在实际应用中,还需要考虑文件安全性、错误处理、文件存储位置管理等多个方面,确保文件操作的稳定性和安全性。同时,对于大型文件的上传和下载,可能需要引入...

    SpringBoot+SpringMVC+Freemarker实现单个上传和多个文件上传

    SpringBoot版本的SpringMVC+Freemarker上传案例,地址是localhost:8888/photo/index进入上传页面,默认是三个文件,自己可以屏蔽两个文件就是单个文件的状态了,首先在电脑的D盘新建一个upload的文件夹,...

    SpringMVC单文件上传、多文件上传、文件列表显示、文件下载

    以下将详细讲解SpringMVC如何实现单文件上传、多文件上传、文件列表显示以及文件下载。 1. **单文件上传** 在SpringMVC中,我们可以使用`@RequestParam("file") MultipartFile file`注解来接收前端提交的单个文件...

    SpringMVC实现文件上传下载

    以下将详细介绍如何利用SpringMVC实现文件上传、下载以及文件列表展示和删除。 **一、文件上传** 1. **配置MultipartResolver**:SpringMVC默认不支持文件上传,我们需要添加`CommonsMultipartResolver`作为解析器...

    Spring下的子框架SpringMVC实现多文件上传完整代码

    ### SpringMVC 实现多文件上传的技术要点与实践 #### 技术背景 SpringMVC 是 Spring 框架中的一个重要组成部分,它提供了一种基于 Model-View-Controller(MVC)模式的轻量级 Web 开发框架。利用 SpringMVC,开发...

    springMVC上传文件.zip_springmvc_上传文件_文件上传

    在SpringMVC中实现文件上传是一项常见的任务,它涉及到HTTP协议、多部分表单数据处理以及服务器端的文件存储策略。下面将详细阐述如何在SpringMVC中进行文件上传,并涵盖相关知识点。 1. **MultipartFile接口** ...

Global site tag (gtag.js) - Google Analytics