实现上传图片功能在Springmvc中很好实现。现在我将会展现完整例子。

开始需要在pom.xml加入几个jar,分别是:

  1. <dependency>
  2. <groupId>commons-fileupload</groupId>
  3. <artifactId>commons-fileupload</artifactId>
  4. <version>1.3.1</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>commons-io</groupId>
  8. <artifactId>commons-io</artifactId>
  9. <version>2.4</version>
  10. </dependency>

接下来,在Springmvc的配置加入上传文件的配置(PS:我把springmvc的完整配置都展现出来):

  1. <!--默认的mvc注解映射的支持 -->
  2. <mvc:annotation-driven/>
  3. <!-- 处理对静态资源的请求 -->
  4. <mvc:resources location="/static/" mapping="/static/**" />
  5. <!-- 扫描注解 -->
  6. <context:component-scan base-package="com.ztz.springmvc.controller"/>
  7. <!-- 视图解析器 -->
  8. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  9. <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
  10. <!-- 前缀 -->
  11. <property name="prefix" value="/WEB-INF/jsp/"/>
  12. <!-- 后缀 -->
  13. <property name="suffix" value=".jsp"/>
  14. </bean>
  15. <!-- 上传文件 -->
  16. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  17. <property name="defaultEncoding" value="utf-8"/>
  18. <!-- 最大内存大小 -->
  19. <property name="maxInMemorySize" value="10240"/>
  20. <!-- 最大文件大小,-1为不限制大小 -->
  21. <property name="maxUploadSize" value="-1"/>
  22. </bean>

一、 单文件上传

当然在一个表单中,需要添加enctype="multipart/form-data",一个表单有文件域,肯定也有基本的文本框,可以一次性提交,springmvc能给我们区别出来,来做不同的处理。首先看下普通的model

  1. package com.ztz.springmvc.model;
  2. public class Users {
  3. private String name;
  4. private String password;
  5. //省略get set方法
  6. //重写toString()方便测试
  7. @Override
  8. public String toString() {
  9. return "Users [name=" + name + ", password=" + password +  "]";
  10. }
  11. }

这个是表单的JSP页面:

  1. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
  2. <%@taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
  3. <%
  4. String path = request.getContextPath();
  5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  6. request.setAttribute("basePath", basePath);
  7. %>
  8. <!DOCTYPE html>
  9. <html>
  10. <head>
  11. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  12. <title>FileUpload</title>
  13. </head>
  14. <body>
  15. <form action="${basePath}file/upload" method="post" enctype="multipart/form-data">
  16. <label>用户名:</label><input type="text" name="name"/><br/>
  17. <label>密 码:</label><input type="password" name="password"/><br/>
  18. <label>头 像</label><input type="file" name="file"/><br/>
  19. <input type="submit" value="提  交"/>
  20. </form>
  21. </body>
  22. </html>

上传成功跳转的JSP页面,并且显示出上传图片:

  1. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
  2. <%@taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
  3. <%
  4. String path = request.getContextPath();
  5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  6. request.setAttribute("basePath", basePath);
  7. %>
  8. <!DOCTYPE html>
  9. <html>
  10. <head>
  11. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  12. <title>头像</title>
  13. </head>
  14. <body>
  15. <img src="${basePath}${imagesPath}">
  16. </body>
  17. </html>

最后是Controller:

  1. package com.ztz.springmvc.controller;
  2. import java.io.File;
  3. import java.util.UUID;
  4. import javax.servlet.http.HttpServletRequest;
  5. import org.springframework.stereotype.Controller;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.RequestMethod;
  8. import org.springframework.web.bind.annotation.RequestParam;
  9. import org.springframework.web.multipart.MultipartFile;
  10. import com.ztz.springmvc.model.Users;
  11. @Controller
  12. @RequestMapping("/file")
  13. public class FileUploadController {
  14. @RequestMapping(value="/upload",method=RequestMethod.POST)
  15. private String fildUpload(Users users ,@RequestParam(value="file",required=false) MultipartFile file,
  16. HttpServletRequest request)throws Exception{
  17. //基本表单
  18. System.out.println(users.toString());
  19. //获得物理路径webapp所在路径
  20. String pathRoot = request.getSession().getServletContext().getRealPath("");
  21. String path="";
  22. if(!file.isEmpty()){
  23. //生成uuid作为文件名称
  24. String uuid = UUID.randomUUID().toString().replaceAll("-","");
  25. //获得文件类型(可以判断如果不是图片,禁止上传)
  26. String contentType=file.getContentType();
  27. //获得文件后缀名称
  28. String imageName=contentType.substring(contentType.indexOf("/")+1);
  29. path="/static/images/"+uuid+"."+imageName;
  30. file.transferTo(new File(pathRoot+path));
  31. }
  32. System.out.println(path);
  33. request.setAttribute("imagesPath", path);
  34. return "success";
  35. }
  36. //因为我的JSP在WEB-INF目录下面,浏览器无法直接访问
  37. @RequestMapping(value="/forward")
  38. private String forward(){
  39. return "index";
  40. }
  41. }

点击提交控制台输出:

Users [name=fileupload, password=test]

浏览器显示结果:

二、 多图片上传

springmvc实现多图片上传也很简单,我们把刚才的例子修改下,在加一个文件域,name的值还是相同

  1. <body>
  2. <form action="${basePath}file/upload" method="post" enctype="multipart/form-data">
  3. <label>用户名:</label><input type="text" name="name"/><br/>
  4. <label>密 码:</label><input type="password" name="password"/><br/>
  5. <label>头 像1</label><input type="file" name="file"/><br/>
  6. <label>头 像2</label><input type="file" name="file"/><br/>
  7. <input type="submit" value="提  交"/>
  8. </form>
  9. </body>

展示图片来个循环,以便显示多张图片

  1. <body>
  2. <c:forEach items="${imagesPathList}" var="image">
  3. <img src="${basePath}${image}"><br/>
  4. </c:forEach>
  5. </body>

控制层代码如下:

  1. package com.ztz.springmvc.controller;
  2. import java.io.File;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.UUID;
  6. import javax.servlet.http.HttpServletRequest;
  7. import org.springframework.stereotype.Controller;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import org.springframework.web.bind.annotation.RequestMethod;
  10. import org.springframework.web.bind.annotation.RequestParam;
  11. import org.springframework.web.multipart.MultipartFile;
  12. import com.ztz.springmvc.model.Users;
  13. @Controller
  14. @RequestMapping("/file")
  15. public class FileUploadController {
  16. @RequestMapping(value="/upload",method=RequestMethod.POST)
  17. private String fildUpload(Users users ,@RequestParam(value="file",required=false) MultipartFile[] file,
  18. HttpServletRequest request)throws Exception{
  19. //基本表单
  20. System.out.println(users.toString());
  21. //获得物理路径webapp所在路径
  22. String pathRoot = request.getSession().getServletContext().getRealPath("");
  23. String path="";
  24. List<String> listImagePath=new ArrayList<String>();
  25. for (MultipartFile mf : file) {
  26. if(!mf.isEmpty()){
  27. //生成uuid作为文件名称
  28. String uuid = UUID.randomUUID().toString().replaceAll("-","");
  29. //获得文件类型(可以判断如果不是图片,禁止上传)
  30. String contentType=mf.getContentType();
  31. //获得文件后缀名称
  32. String imageName=contentType.substring(contentType.indexOf("/")+1);
  33. path="/static/images/"+uuid+"."+imageName;
  34. mf.transferTo(new File(pathRoot+path));
  35. listImagePath.add(path);
  36. }
  37. }
  38. System.out.println(path);
  39. request.setAttribute("imagesPathList", listImagePath);
  40. return "success";
  41. }
  42. //因为我的JSP在WEB-INF目录下面,浏览器无法直接访问
  43. @RequestMapping(value="/forward")
  44. private String forward(){
  45. return "index";
  46. }
  47. }

PS:本demo地址:http://download.csdn.net/detail/zwz568017880/9043089

springmvc上传图片并显示图片--支持多图片上传的更多相关文章

  1. Jquery图片上传组件,支持多文件上传

    Jquery图片上传组件,支持多文件上传http://www.jq22.com/jquery-info230jQuery File Upload 是一个Jquery图片上传组件,支持多文件上传.取消. ...

  2. ajax 提交所有表单内容及上传图片(文件),以及单独上传某个图片(文件)

    我以演示上传图片为例子: java代码如下(前端童鞋可以直接跳过看下面的html及js): package com.vatuu.web.action; import java.io.File; imp ...

  3. PHP 图片上传工具类(支持多文件上传)

    ====================ImageUploadTool======================== <?php class ImageUploadTool { private ...

  4. php 图片上传 并返回上传文件位置 支持多文件上传

    <?php /** * Created by PhpStorm. * User: DY040 * Date: 2018/4/26 * Time: 13:23 */ echo '<pre&g ...

  5. 适应各浏览器图片裁剪无刷新上传jQuery插件(转)

    看到一篇兼容性很强的图片无刷新裁剪上传的帖子,感觉很棒.分享下!~ 废话不多说,上效果图. 一.首先建立如下的一个page <!DOCTYPE html> <html xmlns=& ...

  6. puzz: 图片和表单上传的不一致问题

    1.    方向1 用户提交表单, 图片和表单同步上传.(由同一服务器处理, 服务器压力大. 没有分离) 2.    方向2 图片和表单分开上传. 如图片访问ftp,表单提交后台(图片和后台分离) 2 ...

  7. 移动前端—H5实现图片先压缩再上传

    在做移动端图片上传的时候,用户传的都是手机本地图片,而本地图片一般都相对比较大,拿iphone6来说,平时拍很多图片都是一两M的,如果直接这样上传,那图片就太大了,如果用户用的是移动流量,完全把图片上 ...

  8. 使用html5 FileReader获取图片,并异步上传到服务器(不使用iframe)

    使用html5 FileReader获取图片,并异步上传到服务器(不使用iframe)   原理: 1.使用FileReader 读取图片的base64编码 2.使用ajax,把图片的base64编码 ...

  9. #添加图片,最多只能上传9张.md

    #添加图片,最多只能上传9张.md 前端页面: ```javascript <form id="imgForm" enctype="multipart/form-d ...

  10. 使用html5 FileReader获取图片,并异步上传到server(不使用iframe)

    使用html5 FileReader获取图片,并异步上传到server(不使用iframe) 原理: 1.使用FileReader 读取图片的base64编码 2.使用ajax.把图片的base64编 ...

随机推荐

  1. Python的高级特性2:列表推导式,生成器与迭代器

    一.列表推导式 1.列表推导式是颇具python风格的一种写法.这种写法除了高效,也更简短. In [23]: {i:el for i,el in enumerate(["one" ...

  2. MvvmLight ToolKit .Net4.5版本 CanExecute不能刷新界面bug

    一 问题重现    1.在使用最新版本v5.1的MvvmLight中(其实这个问题很早就有了),发现CanExecute不能很好地工作了.一个简单的工程,只有MainWindow和MainWindow ...

  3. 802.11 对于multicast 和 broadcast的处理

    ethernet内部会有broadcast 和 multicast.这两种包都是一个STA向多个STA发包. 当没有wifi存在的时候,LAN口之间的broadcast 和 multicast是可靠转 ...

  4. 此utf8 非彼utf8 ——谈http协议里的编码问题

    我这里看两个编码: BDPAGETYPE:2BDQID:0xc92b034d0bc985e8BDUSERID:809441751 Cache-Control:private Connection:Ke ...

  5. HTML5+JS 《五子飞》游戏实现(五)移动棋子

    上一章 我们知道了怎么处理两个重要的吃棋动作,想要吃对方的棋子,首先得移动自己的棋子.现在里沃特跟大家分享分享,怎么移动棋子. 想要移动棋子,在页面上,首先要点击一下要移动的棋子,然后再点击一下目标位 ...

  6. Altera OpenCL用于计算机领域的13个经典案例(转)

    英文出自:Streamcomputing 转自:http://www.csdn.net/article/2013-10-29/2817319-the-application-areas-opencl- ...

  7. [BZOJ1299]巧克力棒(博弈论)

    题目:http://hzwer.com/1976.html 分析:先Orz hzwer 对于盒子外面的巧克力棒,就是Nim游戏. 所以就很容易想到先手第一步最好从盒子中取出m根巧克力棒,使得这些巧克力 ...

  8. [BZOJ1016][JSOI2008]最小生成树计数(结论题)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1016 分析: 首先有个性质:如果边集E.E'都可以表示一个图G的最小生成树(当然E和E ...

  9. Java关键字this、super使用总结

    版权声明:原创作品,如需转载,请与作者联系.否则将追究法律责任. 作者:熔岩日期:2007-03-01MSN :leizhimin@126.com声明:原创作品,未经授权,谢绝转载! 好久没有对所学知 ...

  10. 在eclipse中使用第三方库总结

    一.建立user library 导入第三方jar文件,最简单的方式是:右键工程/属性/java build path/add external jars. 另一种方式是:window/prefren ...