前言

    在表单数据中,我们可能会遇到头像、照片等图片的上传等需求,那么如果表单中包含一个图片元素,我们在controller中应该如何接收呢?

正文

    在实际的项目中,我们通常都会有专门的图片服务器来存储图片,这里我们为了简单,直接使用自己的本地目录来虚拟一个图片路径,只要能达到图片上传的目的就行。我们使用tomcat的虚拟目录来实现:
    在tomcat目录下的conf/server.xml中添加:<Context docBase="本地目录" path="/pic" reloadable="false"/>,配置了如上的虚拟目录后,访问http://localhost:8080/pic就可以访问配置的本地目录下的图片。
    要实现文件上传,要再pom文件中添加以下依赖:

        <dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.2.2</version></dependency>

其次还要再springmvc.xml文件中配置多媒体解析器:

    <!-- 配置多媒体文件解析器 --><!-- 文件上传 --><bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!-- 设置上传文件的最大尺寸为5MB --><property name="maxUploadSize"><value>5242880</value></property></bean>

我们在原来的登录页面的jsp中加入一个文件上传的input:

    <form action="${pageContext.request.contextPath }/fileupload.action" enctype="multipart/form-data" method="post">账号:<input type="text" name="username">密码:<input type="password" name="password"><br/>自定义日期格式数据测试:<input type="text" name="texttime" value="<fmt:formatDate value='${texttime}' pattern='yyyy-MM-dd HH:mm:ss'/>"/>   <h3>${data}</h3><input type="file" name="picFile"><input type="submit" value="登录"></form>

**需要注意的是,如果要使用文件上传的功能,form表单必须有一个enctype="multipart/form-data"属性,且表单的提交方式为post,这样子在点击登录按钮的时候,表单会提交到后台controller的方法中:

    @RequestMapping("/fileupload")public String uploadPic(MultipartFile picFile, Model model) throws Exception {//生成新的文件名String picName = UUID.randomUUID().toString();//扩展名String oriName = picFile.getOriginalFilename();String extName = oriName.substring(oriName.lastIndexOf("."));//保存文件picFile.transferTo(new File("F:\\temp\\" + picName + extName));model.addAttribute("picName", picName + extName);return "/WEB-INF/jsp/success.jsp";}

可以看到,在这里我们如果想要接受页面的图片,要使用MultipartFile这个对象来接收,且属性名要和前台input的属性名称一致。在这个方法中,我们生成了一个新的文件名,并将其放在本地目录下,最后返回了一个success的jsp页面,并在model中将新图片的名称携带了过去。在success。jsp中是这样取值的:

<body><h1>图片保存成功</h1><input type="image" src="/pic/${picName}">
</body>

这里直接将图片名取出来,在一个图片input文本框中显示出来。

图片正常显示,说明我们的文件上传成功,而在本地目录下,也保存了刚才上传的图片。

总结

    在本文中对SpringMVC的图片上传的功能做了一个简述,在实际的工作中,使用七牛云等图片服务器将会更加方便的实现图片的管理和存储。

SpringMVC学习系列(六)------图片的上传相关推荐

  1. SSM框架:springmvc实现图片的上传与图片上传路径的设置

    说明:这个图片类文件上传的步骤是我经过验证的,在SSM框架下完成,搭建框架的部分不在这里说明. 第一步:添加两个项目需要的依赖.(pom.xml) <dependency><grou ...

  2. springmvc图片文件上传接口

    springmvc图片文件上传 用MultipartFile文件方式传输 Controller package com.controller;import java.awt.image.Buffere ...

  3. Android音视频学习系列(六) — 掌握视频基础知识并使用OpenGL ES 2.0渲染YUV数据

    系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...

  4. [网络安全学习篇60]:文件上传

    引言:我的系列博客[网络安全学习篇]上线了,小编也是初次创作博客,经验不足:对千峰网络信息安全开源的视频公开课程的学习整理的笔记整理的也比较粗糙,其实看到目录有300多集的时候,讲道理,有点怂了,所以 ...

  5. SpringMvc+ajax实现文件跨域上传

    最近开始学习SpringMVC框架,在学习数据绑定的时候,发现可以使用@RequestParam注解绑定请求数据,实现了文件上传.但是如果一个项目是前后端分离的,前端系统向后端服务上传文件该怎么解决了 ...

  6. .Net Core 图片文件上传下载

    当下.Net Core项目可是如雨后春笋一般发展起来,作为.Net大军中的一员,我热忱地拥抱了.Net Core并且积极使用其进行业务的开发,我们先介绍下.Net Core项目下实现文件上传下载接口. ...

  7. Flask实现图片的上传、下载及展示

    用Flask处理图片非常容易,这一篇学习一下图片的上传.下载及展示.还是以实例代码演示为主. 首先,实现一个简单的上传(过程中未做任何处理,只是为了演示) 点击选择图片,输入李四: HTML代码: & ...

  8. axios文件上传 formdata_基于业务场景下的图片/文件上传方案总结

    图片/文件上传组是企业项目开发中必不可少的环节之一, 但凡涉及到用户模块的都会有图片/文件上传需求, 在很多第三方组件库(ant desigin, element ui)中它也是基础组件之一. 接下来 ...

  9. java 图片服务器 上传_Java实现把图片上传到图片服务器(nginx+vsftp)

    前言: 在我另一篇笔记中已经记载了如何用nginx + vsftp搭建图片服务器(请参考nginx + vsftp搭建图片服务器),并且用vsftp的客户端工具filezilla测试过已经可用.但是在 ...

最新文章

  1. C语言经典例83-求0—7所能组成的奇数个数
  2. 渣男一般的产品经理长什么样?管过几百产品之后,谈谈如何做好这一行
  3. 【转】执行Import-SPWeb报错Import-SPWeb : Requested value 'PublishingPages' was not found
  4. AJAX使用技巧:如何处理书签和翻页按扭
  5. 华为P40系列国行版来了:价格成最大悬念!
  6. 【Flink】FileNotFoundException: JAR file does not exist: -ynm -yst
  7. 【Flink】Flink NoSuchFieldError BIND_PORT
  8. 获取页面中超链接数量_微信订阅号自定义菜单添加页面模板使用教程。
  9. c语言表达式运算符,C语言运算符与表达式
  10. 《众妙之门 JavaScript与jQuery技术精粹》 - 读书笔记总结[无章节版][1-60]
  11. oracle删除导入库,oracle数据库删除和导入方法
  12. 关于新APP,从交底书入手
  13. vue 倒计时 插件_VUE-倒计时插件使用(订单,砍价,拼团,倒计时使用)
  14. 周灏:金融大数据量化信用
  15. python re 正则提取中文
  16. 一百行写一个2048
  17. 海思开发板海图科技测评,海图海思开发板怎么样
  18. 减去“商品名”这层包装外衣,让你看清“药品名”的真谛 - 看看你的感冒在中西医各怎样解读与配药
  19. 第65天-内网安全-域环境工作组局域网探针方案
  20. 融资、量产和一栈式布局,这家Tier 1如此备战高阶智驾决赛圈

热门文章

  1. 【Vue】动手实现录屏功能并本地保存
  2. 实验2 正弦波振荡器(LC振荡器和晶体振荡器)
  3. freemap初学者教程_Jupyter初学者笔记本:教程
  4. bmp180气压传感器工作原理_氢气传感器的工作原理及特点
  5. vs2005无法附加,绑定句柄无效
  6. c语言程序的模板,C++中模板与用C语言中实现模板
  7. Arduino电路图制作软件——Fritzing
  8. 视频内容转文字怎么转,让你学会3个简单方法
  9. TI cc2541协议栈开发环境的搭建
  10. Digispark与 badusb