`

Spring文件上传

阅读更多
文件上传可以使用普通的表单提交,也可以使用AJAX异步提交,如果需要使用AJAX提交则需要引入juery.form.js。

1、普通的表单提交文件上传

web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	version="2.4"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<!-- spring 监听-->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	<!-- spring 字符集过滤 -->
	<filter>
		<filter-name>CharacterEncoding</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter
		</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>CharacterEncoding</filter-name>
		<url-pattern>*.action</url-pattern>
	</filter-mapping>
	
	<filter-mapping>
		<filter-name>CharacterEncoding</filter-name>
		<url-pattern>*.htm</url-pattern>
	</filter-mapping>
	
	<!-- spring mvc -->
	<servlet>
		<servlet-name>http</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet
		</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:dispatcher-servlet.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>http</servlet-name>
		<url-pattern>*.action</url-pattern>
	</servlet-mapping>
	
</web-app>


dispatcher-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:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd   
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd   
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
       
	<!-- Spring @AutoWired 依赖自动注入,不需要setter方法 -->
	<bean
		class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />

	<!-- Spring 扫描使用注解的包路径 -->
	<context:component-scan
		base-package="com.it.springweb.controller" />
	
	<!-- Freemarker模板配置 -->
	<bean id="freemarkerConfig"
		class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
		<property name="templateLoaderPath" value="/WEB-INF/freemarker/" />
		<property name="defaultEncoding" value="UTF-8" />
	</bean>
	
	<!--Freemarker视图解析器  -->
	<bean
		class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
		<property name="cache" value="true" />
		<property name="prefix" value="" />
		<property name="suffix" value=".ftl" />
		<property name="exposeSpringMacroHelpers" value="true" />
		<property name="exposeRequestAttributes" value="true" />
		<property name="exposeSessionAttributes" value="true" />
		<property name="requestContextAttribute" value="request" />
		<property name="contentType" value="text/html; charset=utf-8" />
	</bean>

	<!-- Spring JSON 格式转换依赖的Jar -->
	<bean id="mappingJacksonHttpMessageConverter"
		class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
		
	<!-- 支持上传文件 -->
	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<!-- 10M -->
		<property name="maxUploadSize">
			<value>52428800</value>
		</property>
		<property name="maxInMemorySize">
			<value>10240</value>
		</property>
		<property name="defaultEncoding">
			<value>UTF-8</value>
		</property>
	</bean>
</beans>

//普通的文件上传
@Controller
public class MyController {

    @Autowired
    public UserService userService;

    @RequestMapping("/showView")
    public String showView(HttpServletRequest request) {
        userService.deleteUser("1");

        request.setAttribute("name", "张三");
        return "showView";
    }

    /**
     * 
     * 文件上传 <br>
     * 〈功能详细描述〉
     * 
     * @param request
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    @RequestMapping("/importFileDatas")
    public String importFileDatas(HttpServletRequest request) {
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        MultipartFile multipartFile = multipartRequest.getFile("uploadFile");

        List<Map<String, Object>> userList = new ArrayList<Map<String, Object>>();
        BufferedReader br = null;
        try {
            InputStream is = multipartFile.getInputStream();
            br = new BufferedReader(new InputStreamReader(is, "UTF-8"));

            String line = null;
            while ((line = br.readLine()) != null) {
                String[] datas = line.split(",");
                Map<String, Object> userMap = new HashMap<String, Object>();

                userMap.put("userName", datas[0]);
                userMap.put("password", datas[1]);
                userMap.put("address", datas[2]);
                userMap.put("phone", datas[3]);

                userList.add(userMap);
            }
        } catch (Exception e) {
            //
        } finally {
            if (br != null) {
                IOUtils.closeQuietly(br);
            }
        }

        // 保存用户数据到用户表
        saveBatchUserList(userList);
        return "showView";
    }

    private void saveBatchUserList(List<Map<String, Object>> userList) {

    }

}

showView.ftl:
<!doctype html>  
<html>  
<head>  
    <meta charset="utf-8"/>  
    <title></title>  
    <#assign ctxPath=request.contextPath>  
    <#setting number_format="#">
    <script type="text/javascript" src="${ctxPath}/staticfile/js/jquery-1.7.1.js"></script>  
    <script>
    	function upload(){
    		$("#uploadForm").submit();
    	}
    </script>
</head>  
  
<body>  
   姓名: ${name!''}
   <form name="uploadForm" id="uploadForm" action="${ctxPath}/importFileDatas.action" 
   		method="post" enctype="multipart/form-data">
   		<input type="file" name="uploadFile">
   		<input type="button" onclick="upload()" value="上传">
   </form>
</body>  
</html>  



2、使用AJAX异步提交
//通过AJAX异步请求实现文件上传
@Controller
public class MyController {
    /**
     * 
     * 文件上传 <br>
     * 〈功能详细描述〉
     * 
     * @param request
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    @RequestMapping("/importFileDatas")
    public void importFileDatas(HttpServletRequest request, HttpServletResponse response) {
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        MultipartFile multipartFile = multipartRequest.getFile("uploadFile");

        List<Map<String, Object>> userList = new ArrayList<Map<String, Object>>();
        BufferedReader br = null;
        try {
            InputStream is = multipartFile.getInputStream();
            br = new BufferedReader(new InputStreamReader(is, "UTF-8"));

            String line = null;
            while ((line = br.readLine()) != null) {
                String[] datas = line.split(",");
                Map<String, Object> userMap = new HashMap<String, Object>();

                userMap.put("userName", datas[0]);
                userMap.put("password", datas[1]);
                userMap.put("address", datas[2]);
                userMap.put("phone", datas[3]);

                userList.add(userMap);
            }
        } catch (Exception e) {
            //
        } finally {
            if (br != null) {
                IOUtils.closeQuietly(br);
            }
        }

        // 保存用户数据到用户表
        boolean flag = saveBatchUserList(userList);

        Map<String, Object> result = new HashMap<String, Object>();
        result.put("count", userList.size());
        result.put("flag", flag ? "success" : "failed");
        JSONArray jsonArray=JSONArray.fromObject(result);
        try {
            response.getWriter().print(jsonArray);
        } catch (IOException e) {
        }
    }

    private boolean saveBatchUserList(List<Map<String, Object>> userList) {
        return false;
    }

}

<!doctype html>  
<html>  
<head>  
    <meta charset="utf-8"/>  
    <title></title>  
    <#assign ctxPath=request.contextPath>  
    <#setting number_format="#">
    <script type="text/javascript" src="${ctxPath}/staticfile/js/jquery-1.7.1.js"></script>
    <script type="text/javascript" src="${ctxPath}/staticfile/js/jquery.form.js"></script>  
    <script>
    	function upload(){
			var submitForm=$("#uploadForm")[0];
			var options = {
				target: submitForm,
		        success: function(resultMap) {
		        	//把返回的结果转化为json对象
		        	var result=resultMap[0];
		        	var count=result.count;
		        	var flag=result.flag;
		        	alert("上传"+count+"个");
		        	alert(flag);
		        },
		        error: function(){
		        	alert("系统异常,暂时无法访问!");
		        },
		        type: 'post',
		        dataType: 'json',
		        iframe: true,
		        async:false,
		        clearForm: false,
		        resetForm: false	
			};
			$(submitForm).ajaxSubmit(options);
    	}
    </script>
</head>  
  
<body>  
   姓名: ${name!''}
   <form name="uploadForm" id="uploadForm" action="${ctxPath}/importFileDatas.action" 
   		method="post" enctype="multipart/form-data">
   		<input type="file" name="uploadFile">
   		<input type="button" onclick="upload()" value="上传">
   </form>
</body>  
</html> 
分享到:
评论

相关推荐

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

    本压缩包"struts+spring文件上传大小限制.rar"显然是针对在Struts和Spring整合环境下,如何处理文件上传时的大小限制问题。以下将详细介绍这两个框架在文件上传时的处理机制以及如何设置文件大小限制。 1. Struts...

    spring 文件上传实例

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

    spring 文件上传jar包

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

    Spring 文件上传

    在Spring框架中,文件上传是常见的功能之...总结,Spring文件上传功能强大且灵活,但同时也需要谨慎处理,确保上传过程的安全性和稳定性。理解并熟练运用上述知识点,可以帮助你在实际开发中更好地处理文件上传的需求。

    spring 文件上传.rar

    在Spring MVC框架中,文件上传是一项常见的功能,用于接收客户端发送的文件数据并保存到服务器。这个"spring 文件上传.rar"压缩包包含了实现这一功能所需的jar包和其他资源,下载后解压即可直接应用于你的项目中。 ...

    spring文件上传代码

    这里我们探讨的主题是“spring文件上传代码”,这涉及到Spring MVC如何处理文件上传请求,以及如何实现通用的Excel导入功能。我们将从Java微服务的视角出发,讨论相关依赖包和关键组件。 1. **文件上传**: - ...

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

    在Java Spring框架中,文件上传是一项常见的功能,用于...以上就是关于Java Spring文件上传的基本介绍和实现步骤。在实际项目中,还需要根据具体需求进行优化和扩展,比如添加文件预览、文件类型检查、错误处理等功能。

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

    在Spring框架中,文件上传和下载是常见的功能需求,尤其在构建Web应用程序时。为了实现这一功能,开发者通常会依赖一些外部库,如Apache Commons IO和Apache Commons FileUpload。这两个库提供了强大的文件处理能力...

    spring 文件上传

    例如MSDN 的资源上传,yahoo邮箱的附件上传,论坛的附件上传等,文件上传的方式有很多种,例如,使用Struts框架实现文件上传,在JSP中使用jspSmartUpload 组件实现文件上传和使用Spring框架实现文件上传等

    MYECLIPSE AXIS2 + SPRING 文件上传

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

    spring文件上传工具类

    封装springmvc上传单文件、多文件保存,保存文件时(文件夹路径不存在则创建),会改变文件名,使用起来非常方便。

    【springmvc+jquery.form.min.js+spring文件上传】

    在本项目"【springmvc+jquery.form.min.js+spring文件上传】"中,我们将探讨如何结合这两个技术实现异步文件上传。 首先,我们需要理解Spring MVC中的文件上传处理。Spring MVC提供了`@RequestParam("file") ...

    spring文件上传测试项目

    spring文件上传测试项目

    springcloud处理文件上传

    本话题主要探讨如何在Spring Cloud环境中处理文件上传,特别是在结合Feign和Zuul这两个组件时的实现方法。Feign是Spring Cloud的一个声明式HTTP客户端,用于简化服务间的调用;而Zuul则是作为API网关,提供路由、...

    基于Spring实现文件上传功能

    二、Spring文件上传机制 Spring框架提供了多种方式来实现文件上传,包括使用MultipartFile接口、使用Servlet API等。其中,MultipartFile接口是Spring框架提供的一个接口,用于处理文件上传的请求。该接口提供了...

    基于 Spring 实现文件上传的功能

    Spring文件上传的例子需要Java 17或以上版本,以及Gradle 7.5或更高版本,或者Maven 3.5及以上版本。这些工具是构建和管理Java项目的基础,确保了代码的编译和运行。 1. **配置Spring MVC** 要启用Spring MVC来...

    spring mvc上传文件

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

    Spring文件的上传和下载

    以上就是基于Spring实现文件上传和下载的基本流程和技术点。在实际开发中,还需要考虑错误处理、文件大小限制、安全验证等细节问题。在"onegis"这个压缩包中,可能包含了一个实际的Spring Web项目示例,你可以通过...

    spring mvc文件上传实现进度条

    在Spring MVC框架中,文件上传是一项常见的功能,而实现文件上传进度条则能提供更好的用户体验。这个场景通常涉及到前端的JavaScript或jQuery库(如jQuery File Upload)与后端的Spring MVC控制器之间的交互,以及...

Global site tag (gtag.js) - Google Analytics