基于Spring3 MVC实现基于HTML form表单文件上传

简介: 基于Spring3 MVC实现基于HTML form表单文件上传

基于Spring3 MVC实现基于form表单文件上传


一:杂项准备


环境搭建参考这里-http://blog.csdn.net/jia20003/article/details/8471169


二:前台页面


根据RFC1867,只要在提交form表单中声明提交方法为POST,enctype属


性声明为multipart/form-data, action声明到要提交的url即可。具体如下:

1357470742_8718.png



三:spring配置


使用spring3的MultipartHttpReqest来接受来自浏览器的发送的文件内容。


需要配Multipart解析器在express-servlet.xml中。内容如下:

1357470770_2552.png



同时还需要在maven的pom.xml文件添加apachefileupload与common-io两个包。


1357470796_6012.png


四:Controller中方法实现

@RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
public ModelAndView getUploadFile(HttpServletRequest request, HttpServletResponse response) {
  System.out.println("fucking spring3 MVC upload file with Multipart form");
  String myappPath = request.getSession().getServletContext().getRealPath("/");
  try {
    if (request instanceof MultipartHttpServletRequest) {
      MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
      System.out.println("fucking spring3 MVC upload file with Multipart form");
      // String myappPath = multipartRequest.getServletContext().getRealPath("/"); 
      // does not work, oh my god!!
      MultipartFile file = multipartRequest.getFiles("userfile1").get(0);
      long size = file.getSize();
      byte[] data = new byte[(int) size];
      InputStream input = file.getInputStream();
      input.read(data);
      
      // create file, if no app context path, will throws access denied.
      // seems like you could not create any file at tomcat/bin directory!!!
      File outFile = new File(myappPath + File.separator + file.getOriginalFilename());
      if(!outFile.exists()) {
        outFile.createNewFile();
        System.out.println("full path = " + outFile.getAbsolutePath());
      } else {
        System.out.println("full path = " + outFile.getAbsolutePath());
      }
      FileOutputStream outStream = new FileOutputStream(outFile);
      
      outStream.write(data);
      outStream.close();
      input.close();
    }
  } catch (Exception e) {
    e.printStackTrace();
  }
 
  return new ModelAndView("welcome");
}

常见问题:


1. java.io.IOException: Access is denied避免这个错误是把文件创建在app


context path的下面所以要获取servlet context的本地路径。


2. Request类型不是MultipartHttpReqest类型,原因是没有配置spring的Multipart解析器


Chrome中运行截屏:

1357471347_1534.png



转载请注明

相关文章
|
5天前
|
Python
HTML表单
【6月更文挑战第13天】HTML表单。
14 7
|
11天前
|
XML 前端开发 Java
Spring3 MVC中使用Swagger生成API文档
Spring3 MVC中使用Swagger生成API文档
12 0
|
11天前
|
JSON 前端开发 API
Apache HttpClient调用Spring3 MVC Restful Web API演示
Apache HttpClient调用Spring3 MVC Restful Web API演示
12 1
|
11天前
|
前端开发 Java 关系型数据库
在Spring3 MVC中五步配置集成注解方式Hibernate3
在Spring3 MVC中五步配置集成注解方式Hibernate3
18 3
|
11天前
|
JSON 前端开发 Java
记录一次让我吐血的spring3 MVC HTTP406 Json转换错误
记录一次让我吐血的spring3 MVC HTTP406 Json转换错误
8 0
|
11天前
|
前端开发 IDE Java
Spring3 MVC 集成Velocity中文支持
Spring3 MVC 集成Velocity中文支持
27 7
|
Java 数据格式 Spring
Spring(十七)之表单处理
表单处理在实际开发中,非常常见,比如登录、注册或者新增、修改等等。 希望本示例对于初学者有一定的提升和帮助 该表单实例,主要说明MVC,相当于前台表单提交,提交相当于一个Http请求,这个请求通过Controller映射到对应的@RequestMapping,找到对应的@RequestMapping的value,即路由,经过该路由处理,将数据以Model或ModelAndView或ModelMap的形式返回给前台展示。
987 0
|
前端开发 Java Apache
|
1月前
|
Java 应用服务中间件 Maven
SpringBoot 项目瘦身指南
SpringBoot 项目瘦身指南
78 0
|
1月前
|
缓存 安全 Java
Spring Boot 面试题及答案整理,最新面试题
Spring Boot 面试题及答案整理,最新面试题
168 0