SpringMVC 两种上传文件方法

     在该示例中,阐述了SpringMVC如何上传文件。

1、上传页面upload.jsp

  <body>
  	<form action="/TestSpringMVC3/data/uploadfile" enctype="multipart/form-data" method="post">
  		file:<input type="file" name="file"><br>
  		<input type="submit" value="upload file">
  	</form>
  </body>
2、controller配置文件
<?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:mvc="http://www.springframework.org/schema/mvc"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
			http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
			http://www.springframework.org/schema/context 
			http://www.springframework.org/schema/context/spring-context-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/mvc 
			http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
			http://www.springframework.org/schema/context 
			http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    <!--
        使Spring支持自动检测组件,如注解的Controller
    -->
  	<context:component-scan base-package="cn.com.yy.controller"/>
  	
  	<!-- 开启注解配置 -->
	<mvc:annotation-driven/>
	   
   	<!-- 支持JSP JSTL的解析器 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    	<property name="prefix" value="/WEB-INF/page/"/>
    	<property name="suffix" value=".jsp"/>
     </bean>
     
     <!-- 配置文件上传解析器 -->
     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
     	<property name="defaultEncoding" value="utf-8"/>
     	<property name="maxUploadSize" value="10485760000"/>
     	<property name="maxInMemorySize" value="40960"/>
     </bean>
</beans>
    主要是添加了文件上传的解析器,配置了默认编码,最大的上传大小以及缓存大小等参数。

3、Controller

package cn.com.yy.controller;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

@Controller
@RequestMapping("/data")
public class FileUploadController {
	
	/**
	 * method1:通过参数CommonsMultipartFile进行解析
	 * @RequestParam("file")中的file对应于upload.jsp中的file类型的name对应的名称
	 * @param file
	 * @return
	 * @throws IOException 
	 */
	@RequestMapping(value="/uploadfile")
	public String upload1(@RequestParam("file") CommonsMultipartFile file) throws IOException{
		//获取文件名称
		String fileName = file.getOriginalFilename();
		//写入本地磁盘
		InputStream is = file.getInputStream();
		byte[] bs = new byte[1024];
		int len;
		OutputStream os = new FileOutputStream(new File("D:/temp/" + fileName));
		while ((len = is.read(bs)) != -1) {
			os.write(bs, 0, len);
		}
		os.close();
		is.close();
		return "upload_success";
	}
	
	@RequestMapping("/upload")
	public String toPage(){
		return "upload";
	}
}


4、返回页面upload_success.jsp

  <body>
	  	upload file success!!
  </body>

5、测试

     访问  http://localhost:8080/TestSpringMVC3/data/upload  跳转到上传页面

    

    选择文件上传

                    

  点击上传会跳转到上传成功页面。

      上述方法只是简单的讲解了SpringMVC如何上传文件。

    

  第二种方法:使用SpringMVC封装的方法进行文件上传

/**
	 * 使用SpringMVC封装好的方法进行文件上传
	 * @param request
	 * @param response
	 * @throws IllegalStateException
	 * @throws IOException
	 */
	@RequestMapping("/uploadfile2")
	public void upload2(HttpServletRequest request,HttpServletResponse response) throws IllegalStateException, IOException{
		//获取解析器
		CommonsMultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext());
		//判断是否是文件
		if(resolver.isMultipart(request)){
			//进行转换
			MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)(request);
			//获取所有文件名称
			Iterator<String> it = multiRequest.getFileNames();
			while(it.hasNext()){
				//根据文件名称取文件
				MultipartFile file = multiRequest.getFile(it.next());
				String fileName = file.getOriginalFilename();
				String localPath = "D:/temp/" + fileName;
				File newFile = new File(localPath);
				//上传的文件写入到指定的文件中
				file.transferTo(newFile);
			}
		}
	}
   该方法上传文件效率更优。




  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值