基于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



转载请注明

相关文章
|
10月前
|
安全 Java 数据安全/隐私保护
如何使用Spring Boot进行表单登录身份验证:从基础到实践
如何使用Spring Boot进行表单登录身份验证:从基础到实践
268 5
|
11月前
|
存储 移动开发 UED
HTML5 的 form 的自动完成功能
在HTML5中,`<form>`元素具备自动完成功能,可根据用户历史输入提供建议,提高输入效率并改善体验。默认情况下,浏览器会自动开启此功能,也可通过设置`autocomplete`属性为`on`或`off`来明确开启或关闭。对于特定表单字段,如`<input>`,同样可以通过设置`autocomplete`属性控制自动完成行为。浏览器通过记录并存储用户的历史输入,在用户再次访问相同表单时提供相应的自动完成建议。
|
存储 Java Spring
Spring Boot中的表单处理
Spring Boot中的表单处理
|
存储 开发框架 Java
Spring Boot中的表单处理
Spring Boot中的表单处理
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
371 0
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
160 0
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
254 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
204 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
331 0
|
SQL 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
358 0