springMVC中上传图片
上传图片,很常见的问题,基本每个人都会遇到,但是个人认为在springMVC中上传图片相对来说是比较简单的,因为框架已经帮我们做好了许多事情。
这篇文章所用的环境:spring4.3.3 、jdk1.8 、eclipse。
环境准备
如果项目中没有导入以下jar包请先导入,这里有:http://download.csdn.net/download/u011403655/8559545
commons-fileupload-1.2.2.jar
commons-io-2.4.jar
在springmvc.xml配置文件中配置插件
在springmvc.xml中加入这一个配置,可以配置文件上传的最大限制。
<!-- 文件上传 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize">
<value>5242880</value>
</property>
</bean>
form中加入一个属性enctype="multipart/form-data"
<form action="${pageContext.request.contextPath}/addPet.action" method="post" enctype="multipart/form-data">
<input type="file" required="required" name="pic" id="exampleInputFile">
...
注意这里的input,name属性是pic,可以直接映射到controller方法的同名参数中。
controller中的方法
@RequestMapping("addPet.action")
public ModelAndView addPet(String name,
double price,
String introduce,
MultipartFile pic,
String classifyName)
throws IllegalStateException, IOException {
if (!pic.isEmpty()) {
String path = "E:\\宠物网站\\image\\";
String originalFileName = pic.getOriginalFilename();
// 新的图片名称
String newFileName = UUID.randomUUID() + originalFileName.substring(originalFileName.lastIndexOf("."));
// 新的图片
File newFile = new File(path + newFileName);
// 将内存中的数据写入磁盘
pic.transferTo(newFile);
}
这里的控制器中的方法参数是 MultipartFile pic,和表单元素中的name是一一对应的,新的文件命名用UUID生成字符串避免文件名重复,同时截取图片的后缀名;最后再把图片写到磁盘上去。到此,就完成了图片的上传。
图片在页面中的显示
web程序是在tomcat中运行的,但是这里的图片是放到了本地的磁盘上的,怎么通过tomcat访问到呢?这篇文章是eclipse,在eclipse中可以配置,双击打开tomcat:

选择modules--->Add Extenal Web Modules--->Document base (就是图片存放在磁盘上的绝对路径),path就是在tomcat中访问的路径,我这里用的是 /image,通过这样的配置,在tomcat中通过 localhost:8080/image/图片名称全称 就能访问到图片。

测试一下,在浏览器中如果通过上述url能访问到图片就说明配置成功。这样在jsp页面中的图片的路径就要写成 src="/image/图片全称"才能访问到图片,不能再加上项目名了。

其实上述的配置过程就是在tomcat中添加了一些配置,配置了一个虚拟目录,如果没有用eclipse,或者嫌eclipse手动配置麻烦,其实可以通过在server.xml中进行配置,在<Host></Host> 中间加入如下配置:
<Context docBase="E:\宠物网站\image" path="/image" reloadable="true"/>
springMVC中上传图片的更多相关文章
- (转)SpringMVC学习(九)——SpringMVC中实现文件上传
http://blog.csdn.net/yerenyuan_pku/article/details/72511975 这一篇博文主要来总结下SpringMVC中实现文件上传的步骤.但这里我只讲单个文 ...
- SpringMvc中的数据校验
SpringMvc中的数据校验 Hibernate校验框架中提供了很多注解的校验,如下: 注解 运行时检查 @AssertFalse 被注解的元素必须为false @AssertTrue 被注解的元素 ...
- 【Spring】SpringMVC中浅析Date类型数据的传递
在控制器中加入如下代码: @InitBinder public void initBinder(ServletRequestDataBinder bin){ SimpleDateFormat sdf ...
- 详解SpringMVC中GET请求
GET请求概述 GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接.URL的编码格式采用的是ASCII编码,而不是uniclde,所有的非ASCII字符都要编 ...
- SpringMVC中使用Interceptor拦截器
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...
- 如何在springMVC 中对REST服务使用mockmvc 做测试
如何在springMVC 中对REST服务使用mockmvc 做测试 博客分类: java 基础 springMVCmockMVC单元测试 spring 集成测试中对mock 的集成实在是太棒了!但 ...
- springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序
springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序 http://www.360doc.com/content/14/03 ...
- SpringMVC中使用Cron表达式的定时器
SpringMVC中使用Cron表达式的定时器 cron(定时策略)简要说明 顺序: 秒 分 时 日 月 星期 年份 (7个参数,空格隔开各个参数,年份非必须参数) 通配符: , 如果分钟位置为* 1 ...
- SpringMVC中使用Json传数据
在web项目中使用Json进行数据的传输是非常常见且有用的,在这里介绍下在SpringMVC中使用Json传数据的一种方法,在我的使用中,主要包括下面四个部分(我个人喜好使用maven这类型工具进行项 ...
随机推荐
- 通过PHP来 获取文件内容 并且分割字符串 呈现在表格中
<?php $aaa = file_get_contents("names.txt"); $data = explode("\n", $aaa); for ...
- 【读书笔记】iOS-使用传感器
和其他的高端智能机一样,iPhone携带了很多传感器:照相机,加速度计,GPS模块和数字指南针. 使用Core Motion框架,你的应用可以读取来自于加速度计,磁力计以及陀螺仪的运动数据. 近距离传 ...
- Javascript异步编程之二回调函数
上一节讲异步原理的时候基本上把回掉函数也捎带讲了一些,这节主要举几个例子来具体化一下.在开始之前,首先要明白一件事,在javascript里函数可以作为参数进行传递,这里涉及到高阶函数的概念,大家可以 ...
- mysql从入门到放弃-入门知识介绍
数据库在互联网网站的重要性 简单地说,数据库就是一个存放数据的仓库,这个仓库是按照一定的数据结构来组织和存储的,我们可以通过数据库提供的多种方法来管理数据库里的数据.由于数据库不易扩展,所以,在一个互 ...
- Android滑动菜单使用(MenuDrawer和SlidingMenu)
项目地址: https://github.com/gokhanakkurt/android-menudrawer https://github.com/jfeinstein10/SlidingMe ...
- jmeter利用自身代理录制脚本
在利用代理录制脚本时一定要安装java jdk,不然不能录制的. 没有安装过java jdk安装jmeter后打开时会提示安装jdk,但是mac系统中直接打开提示安装jdk页面后下载的java并不是j ...
- Java——语句
空语句: ; 符合语句:{} if语句:if () {} else {} break 语句:跳出单层循环 循环语句:for(;;){} do{}while()
- localStorage,sessionStorage的使用
最近因为项目上需要使用到客户端存储,所以稍微研究了一下,以下说说自己的理解和使用经验 1.调用方法相同 各自都包含以下几种操作: //根据key获取对应的值; window.sessionStorag ...
- 减少MySQL主从延迟的神器--并行复制大揭密
1. 简介 MySQL 5.6引入了基于schema的并行复制,即如果binlog events操作的是不同schema的对象,不是DDL,且操作的对象没有对其他schema的foreign key关 ...
- mysql常用赋权命令
GRANT 所需权限 ON 库名.表名 TO '账号'@'允许访问的IP地址'; 把中文按需替换掉 所需权限:select.insert.delete.update按需要来. 上面那个允许访问IP ' ...