动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

用Spring MVC实现文件上传

08-18 17:27 141浏览
举报 T字号
  • 大字
  • 中字
  • 小字

Spring MVC框架和其他的框架一样,需要实现从客户端上传文件到服务器的功能,这也是许多用户的硬性需求。本文我们就来探究如何Spring MVC实现文件上传

我们先来看一下Spring MVC实现文件上传时到底发生了什么。在客户端发送上传文件请求时,一般会与普通请求一样,将请求发送给SpringMVC的前端控制器DispatcherServlet,然后由DispatcherServlet调用HandlerMapping找到处理该请求的Controller。然后DispatcherServlet将请求提交给Controller(如果不适用可以会自动调用HandlerAdapter适配)。Controller调用业务逻辑进行处理,返回一个值。DispatcherServlet查询一个或多个viewResolver视图解析器,找到返回值对应的视图。只不过文件上传功能实现需要对springmvc配置文件添加文件上传相关的配置,同时注意引入相关的包。在编写jsp文件以及controller类时,需要将表单元素与对应的controller方法的传入参数进行相关联,从而将两者绑定,以下进行文件上传功能的具体实现。

一、配置文件上传解析器(CommonsMultipartResolver) 



	
    
    
	
    
          
    
    
	
    
    
    
    
	
    
    
    
        
        
        
	
    
    	
    	
    	
    

对于web.xml只需要配置springmvc上下文即可,配置内容如下所示:



 
	
   
      
        springDispatcherServlet  
        org.springframework.web.servlet.DispatcherServlet  
          
            contextConfigLocation  
            classpath:springMVC-servlet.xml  
       
		  
        1  
      
  
      
      
        springDispatcherServlet  
        /  
  
 	
 	
    index.html
    index.htm
    index.jsp
    default.html
    default.htm
    default.jsp
  
 

二、Controller类

假定文件上传功能需要两个页面,即一个上传页面,一个为上传成功页面。因此对应了两个url,也就对应了两个相应的方法。这里两个方法分别是:showUpload和doUpload,具体代码如下:

import java.io.File;

import java.io.IOException;

 

import org.apache.commons.io.FileUtils;

import org.apache.commons.logging.*;

 

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.multipart.MultipartFile;

import org.springframework.web.servlet.ModelAndView;

 

import com.sun.istack.internal.logging.Logger;

 

@Controller

public class UpLoadController {

private static final Log logger=LogFactory.getLog(UpLoadController.class);

@RequestMapping(value="/upload",method=RequestMethod.GET)

public String showLoad() {





return "upload";



}



@RequestMapping(value="/doUpload",method=RequestMethod.POST)

public String doUpLoad(@RequestParam("file")MultipartFile file,@RequestParam("name")String name) throws IOException {

logger.debug("当前输入文件是:"+file.getOriginalFilename());

String original=file.getOriginalFilename();

{

FileUtils.copyInputStreamToFile(file.getInputStream(),new File("C:\\Users\\carson0408\\Desktop\\photo",name+original));

}


return "success";


}


}

三、jsp文件

    根据controller类编写视图层,首先是上传界面,需要用到file控件用于文件的上传,具体如下:

upload.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"

    pageEncoding="ISO-8859-1"%>



Insert title here

 

hello,carson!welcome to this page!

 

 

 

       接下来就是上传成功的页面: success.jsp: <%@ page language="java" contentType="text/html; charset=ISO-8859-1"     pageEncoding="ISO-8859-1"%>

Insert title here

Congratulation!Succeed to upload the file!

    接着根据controller类和jsp文件进行实例讲解,首先controller类中的showUpload方法返回的是upload字串,对应upload.jsp页面,即输入/upload URL响应到upload.jsp页面。从upload.jsp可以看出该页面主要由一个file控件还有一个提交控件以及一个文本控件构成,文本控件主要填写一个name,用于文件保存使用;file控件用于文件的上传,而提交控件则用于请求的上传。最后可以看出该表单的action对应的url是"doUpload",则对应应该有个用@RequestMapping(value="doUpload")修饰的方法,即doUpload方法,该方法有两个变量一个file,一个name,那么如何将变量与表单元素绑定在一起呢,首先对应的变量与元素名字一致,其次就是用@RequestParam()在参数前修饰。其中如何将file元素传递出来呢,这时候需要一个MultipartFile接口,将file元素传递出来。file对象有一些参数可以用于保存文件:

isEmpty():用于判断文件是否为空。

getInputStream():获取文件输入,获取文件源

getOrignalName():获取原始命名。

这里还需要一个Commons.io包下的一个类FileUtils的copyInputStreamToFile用于文件的保存。copyInputStreamToFile(InputStream arg0,File arg1);第一个参数表示输入流,即读取文件的输入流,第二个参数是一个File对象,这里用new File(保存地址,文件命名)来创建对象。

四、运行项目

1.首先启用tomcat运行项目。

2.在浏览器输入:http://localhost:8080/FirstSpringMVC/upload

3.得到如下页面:

4.上传两个文件,一个命名str,另一个utr

以上就是用Spring MVC实现文件上传的整个过程,我个人觉得需要注意的地方是jsp元素与Controller参数之间的绑定。其他的配置我们不需要造轮子,只要套用一些现成的成熟的配置即可。当然,我们也可以观看本站的Spring MVC视频教程,还有更多的优秀的实例在等着你去学习。

   
   
 
0人推荐
共同学习,写下你的评论
0条评论
jessy
程序员jessy

13篇文章贡献65011字

作者相关文章更多>

推荐相关文章更多>

DOM渲染的详细过程

QCode09-04 14:38

CSS水平和垂直居中技巧大梳理

Code大师09-04 14:50

mui的input框在IOS系统下无法聚焦或点击多次才能聚焦

不写代码你养我啊08-23 11:14

推荐的-视.频播放器以及在线客服

不写代码你养我啊09-17 18:02

谈谈java多线程的三大特性

要学习了06-18 18:13

发评论

举报

0/150

取消