SpringMVC使用MultipartFile文件上传,多文件上传,带参数上传

一、配置SpringMVC

在spring.xml中配置:

  1. <!-- springmvc文件上传需要配置的节点-->
  2. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  3. <property name="maxUploadSize" value="-1"/>
  4. <property name="defaultEncoding" value="UTF-8"/>
  5. <property name="resolveLazily" value="false"/>
  6. <property name="uploadTempDir" value="/statics/document/tempdir"/>
  7. <!--<property name="maxInMemorySize" value="104857600"/>-->
  8. </bean>

其中属性详解:

defaultEncoding="UTF-8" 是请求的编码格式,默认为iso-8859-1

maxUploadSize="-1 是上传文件的大小,单位为字节 -1表示无限制

uploadTempDir="fileUpload/temp" 为上传文件的临时路径


二、单文件与多文件上传

1、单文件上传

jsp:

  1. <body>
  2. <h2>文件上传实例</h2>
  3. <form action="fileUpload.html" method="post" enctype="multipart/form-data">
  4. 选择文件:<input type="file" name="file">
  5. <input type="submit" value="提交">
  6. </form>
  7. </body>

注意要在form标签中加上enctype="multipart/form-data"表示该表单是要处理文件的!

controller:

  1. @RequestMapping("fileUpload")
  2. public String fileUpload(@RequestParam(value = "file", required = false) MultipartFile file) {
  3. // 判断文件是否为空
  4. if (!file.isEmpty()) {
  5. try {
  6. // 文件保存路径
  7. String filePath = request.getSession().getServletContext().getRealPath("/") + "upload/"
  8. + file.getOriginalFilename();
  9. // 转存文件
  10. file.transferTo(new File(filePath));
  11. } catch (Exception e) {
  12. e.printStackTrace();
  13. }
  14. }
  15. // 重定向
  16. return "redirect:/list.html";
  17. }

注意RequestParam参数中value的名字要与jsp中的相互匹配,否则会找不到返回空指针

transferTo是存储文件的核心方法,但是这个方法同一个文件只能使用一次,不能使用第二次,否则tomcat服务器会报500的错误

MultipartFile类常用的一些方法:

  1. String getContentType()//获取文件MIME类型
  2. InputStream getInputStream()//后去文件流
  3. String getName() //获取表单中文件组件的名字
  4. String getOriginalFilename() //获取上传文件的原名
  5. long getSize()  //获取文件的字节大小,单位byte
  6. boolean isEmpty() //是否为空
  7. void transferTo(File dest)//保存到一个目标文件中。

三、多文件上传

与上面的相同只不过是form里面多创建几个input

如果需要使用一个标签控件上传多个文件,需要使用js插件uploadify

jsp:

  1. <body>
  2. <h2>上传多个文件 实例</h2>
  3. <form action="filesUpload.html" method="post"
  4. enctype="multipart/form-data">
  5. <p>
  6. 选择文件:<input type="file" name="files">
  7. <p>
  8. 选择文件:<input type="file" name="files">
  9. <p>
  10. 选择文件:<input type="file" name="files">
  11. <p>
  12. <input type="submit" value="提交">
  13. </form>
  14. </body>

controller:

  1. private boolean saveFile(MultipartFile file) {
  2. // 判断文件是否为空
  3. if (!file.isEmpty()) {
  4. try {
  5. // 文件保存路径
  6. String filePath = request.getSession().getServletContext().getRealPath("/") + "upload/"
  7. + file.getOriginalFilename();
  8. // 转存文件
  9. file.transferTo(new File(filePath));
  10. return true;
  11. } catch (Exception e) {
  12. e.printStackTrace();
  13. }
  14. }
  15. return false;
  16. }
  17. @RequestMapping("filesUpload")
  18. public String filesUpload(@RequestParam("files") MultipartFile[] files) {
  19. //判断file数组不能为空并且长度大于0
  20. if(files!=null&&files.length>0){
  21. //循环获取file数组中得文件
  22. for(int i = 0;i<files.length;i++){
  23. MultipartFile file = files[i];
  24. //保存文件
  25. saveFile(file);
  26. }
  27. }
  28. // 重定向
  29. return "redirect:/list.html";
  30. }

四、带参数上传

还是使用form表单进行上传,但是上传文件的时候要带上一部分的参数

例子form上传使用多个input上传多个文件并且携带参数

jsp:

其中使用了ajaxForm插件,并没有展示出来

  1. <form method="post" enctype="multipart/form-data" id="uploadForm"
  2. action="${pageContext.request.contextPath}/background/worksInsert">
  3. 作品名称:<input type="text" name="name" id="name"><br>
  4. 参赛年份:<input type="text" name="year" id="year"><br>
  5. 参加竞赛:<select name="competition" id="competition">
  6. <option value="请选择">请选择</option>
  7. </select><br>
  8. 源文件上传:<input type="file" name="file1" id="file1"><br>
  9. 展示文件上传:<input type="file" name="file2" id="file2"><br>
  10. 附件上传:<input type="file" name="file3" id="file3"><br>
  11. <input type="submit" value="提交">
  12. </form>

controller:

主要是参数的书写,通过不同的value取到不同得文件,同时request.getParameter方法取到参数的值

  1. @RequestMapping("/worksInsert")
  2. @ResponseBody
  3. public MessageCarrier worksInsert(@RequestParam(value = "file1", required = false) MultipartFile file1, @RequestParam(value = "file2", required = false) MultipartFile file2, @RequestParam(value = "file3", required = false) MultipartFile file3, HttpServletRequest request) throws IOException {
  4. MessageCarrier messageCarrier = new MessageCarrier();
  5. if (file1 == null || request.getParameter("name") == null) {
  6. return null;
  7. }
  8. // 获取源文件存储路径
  9. String filename = request.getParameter("name");
  10. String sworks = savePathL("works") + "/" + filename;
  11. String vworks = savePathL("works") + "/" + filename;
  12. String fworks = savePathL("works") + "/" + filename;
  13. String sRealworks = System.getProperty("studentSystem.root") + sworks.substring(1, sworks.length());
  14. String sRealvworks = System.getProperty("studentSystem.root") + vworks.substring(1, vworks.length());
  15. String sRealfworks = System.getProperty("studentSystem.root") + fworks.substring(1, fworks.length());
  16. DBWorks dbWorks = new DBWorks();
  17. CompetitionWorks competitionWorks = new CompetitionWorks();
  18. // System.out.println(request.getParameter("name"));
  19. competitionWorks.setWorksName(request.getParameter("name"));
  20. competitionWorks.setWorksYear(request.getParameter("year"));
  21. competitionWorks.setWorksComID(request.getParameter("competition"));
  22. competitionWorks.setWorksIsIndex("0");
  23. competitionWorks.setWorksNeedUpdate("0");
  24. competitionWorks.setWorksSavePath(sworks + "/" + file1.getOriginalFilename());
  25. // 如果有展示文件获取展示文件的存储路径
  26. if (file2 != null && file2.getSize() != 0) {
  27. competitionWorks.setWorksSaveViewPath(vworks + "/" + file2.getOriginalFilename());
  28. } else {
  29. competitionWorks.setWorksSaveViewPath("NULL");
  30. }
  31. // 如果有附件的话获取附件的存储路径并保存
  32. if (file3 != null && file3.getSize() != 0) {
  33. competitionWorks.setWorksSaveFilePath(fworks + "/" + file3.getOriginalFilename());
  34. } else {
  35. competitionWorks.setWorksSaveFilePath("NULL");
  36. }
  37. //先将内容设置为NULL
  38. competitionWorks.setWorksContent("NULL");
  39. messageCarrier = dbWorks.worksInsert(competitionWorks);
  40. switch (messageCarrier.getMessageContent()) {
  41. case "OK": {
  42. FilesUpload filesUpload = new FilesUpload();
  43. messageCarrier = filesUpload.upload(file1, sRealworks);
  44. if (!competitionWorks.getWorksSaveViewPath().equals("NULL")) {
  45. messageCarrier = filesUpload.upload(file2, sRealvworks);
  46. }
  47. if (!competitionWorks.getWorksSaveFilePath().equals("NULL")) {
  48. messageCarrier = filesUpload.upload(file3, sRealfworks);
  49. }
  50. //如果上传成功则解析内容并将其录入数据库
  51. if (messageCarrier.getMessageContent().equals("OK")) {
  52. String path = competitionWorks.getWorksSavePath();
  53. String filePath = System.getProperty("studentSystem.root") + path;
  54. String fileName = path.substring(path.lastIndexOf("/") + 1);
  55. File file = new File(filePath);
  56. //解析文件内容
  57. FilesToContent filesToContent = new FilesToContent();
  58. String content = filesToContent.resolve(file);
  59. // System.out.println(content);
  60. competitionWorks.setWorksContent(content);
  61. messageCarrier = dbWorks.worksUpdateName(competitionWorks);
  62. }
  63. }
  64. break;
  65. default: {
  66. return messageCarrier;
  67. }
  68. }
  69. return messageCarrier;
  70. }

http://fromwiz.com/share/s/3cTmX51TMQ-b2QTact03UPg83ItAml2XO4wJ23yjLa2bEKE1

时间: 2024-10-22 02:54:58

SpringMVC使用MultipartFile文件上传,多文件上传,带参数上传的相关文章

WebUploader插件上传大文件单文件和多文件JAVA版使用总结

一.使用webuploader插件的原因说明 被现在做的项目坑了. 先说一下我的项目架构Spring+struts2+mybatis+mysql 然后呢.之前说好的按照2G上传就可以了,于是乎,用了ajaxFileUpload插件,因为之前用图片上传也是用这个,所以上传附件的时候就直接拿来用了 各种码代码,测试也测过了,2G文件上传没问题,坑来了,项目上线后,客户又要求上传4G文件,甚至还有20G以上的..纳尼,你不早说哦... 在IE11下用ajaxFileUpload.js插件上传超过4G的

【转】asp.net(c#)使用HttpWebRequest附加携带请求参数以post方式模拟上传大文件(以图片为例)到Web服务器端

原文地址:http://docode.top/Article/Detail/10002 目录: 1.Http协议上传文件(以图片为例)请求报文体内容格式 2.完整版HttpWebRequest模拟上传文件请求报文内容封装 3.asp.net(c#)使用HttpWebRequest携带请求参数模拟上传文件封装源码下载 一.Http协议上传文件(以图片为例)请求报文体内容格式 首先,我们来看下通过浏览器上传文件的请求报文内容格式,这里以本人自己写的实例为例,如下图.除了能上传图片(即:头像字段),还

论httpclient上传带参数【commons-httpclient和apache httpclient区别】

需要做一个httpclient上传,然后啪啪啪网上找资料 1.首先以前系统中用到的了commons-httpclient上传,找了资料后一顿乱改,然后测试 PostMethod filePost = new PostMethod(url); filePost.setParameter("system", "vinuxpost"); try { Part part[] = UploadRequestHelper.getPart(request); filePost.s

SpringMVC 用MultipartFile文件上传

一.配置文件:SpringMVC 用的是 的MultipartFile来进行文件上传 所以我们首先要配置MultipartResolver:用于处理表单中的file <!-- 配置MultipartResolver 用于文件上传 使用spring的CommosMultipartResolver --> <beans:bean id="multipartResolver" class="org.springframework.web.multipart.com

springMVC实现 MultipartFile 多文件上传

1.Maven引入所需的 jar 包(或自行下载) <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>commons-fileupload</groupId&

SpringMVC实现 MultipartFile 文件上传

1. Maven 工程引入所需要的依赖包 2. 页面需要开放多媒体标签 3. 配置文件上传试图解析器 4. 接收图片信息,通过 IO 流写入磁盘(调用解析其中的方法即可) 如下: 1.1 引入所依赖的jar包 1 <dependency> 2 <groupId>commons-io</groupId> 3 <artifactId>commons-io</artifactId> 4 <version>2.4</version>

SpringMVC实现单文件上传、多文件上传、文件列表显示、文件下载

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文详细讲解了SpringMVC实例单文件上传.多文件上传.文件列表显示.文件下载. 一.新建一个Web工程,导入相关的包 springmvc的包+commons-fileupload.jar+connom-io.jar+commons-logging,jar+jstl.jar+standard.jar 整个相关的包如下: 整个工程目录如下: 二.配置web.xml和SpringMVC文件

SpringMVC 理论与实用技术(二)文件上传

文件上传相信大家都做过,几乎所有的项目都有上传文件的功能,尤其是BS架构的项目中常常被列为常规功能来开发,无论是在开发.NET 项目还是java项目我们会用到很多的框架,这个功能也被集成到了框架之中,因为他太常用了,框架就是为我们提供了一个开发项目的半成品结构,可以大大提高开发效率节省开发成本.缩短开发周期. 长话短说本文主要介绍一个怎么利用springmvc实现单个以及多个文件上传,附加说说上传文件的原理. 从具体的某个实例开始,先形似再神思 第一种方式设计思路:三个注意地方 1.表单页面 2

SpringMVC中采用简洁的配置实现文件上传

文件上传我们一般会有两种策略,一种是通过IO流上传,还有一种是通过表单上传,其实这两种在客户端实现起来都是很简单的,在服务端处理会略有差别,个人感觉IO上传代码简单,但是也有很多硬伤,还是表单上传更合适.特别是如果我们的后台程序如果既面向移动端,又面向Web前端,那么通过表单上传无疑是最佳解决方案.OK,废话不多说,我们来看看如何通过一个最简单的配置来实现文件的上传. 我们主要通过如下几个步骤来实现这个功能: 1.引入依赖 2.创建文件上传页面 3.配置SpringMVC 4.Web配置 5.编