本文介绍 ssm (Spring+SpringMVC+Mybatis)实现上传功能。

以一个添加用户的案例介绍(主要是将上传文件)。

一、需求介绍

我们要实现添加用户的时候上传图片(其实任何文件都可以)。

文件名:以 博客名+日期的年月日时分秒毫秒形式命名

如 言曌博客2017082516403213.png

路径:上传到 uploads 文件夹,并 生成相应的 年和月 子文件夹

如 uploads/2017/8/言曌博客2017082516403213.png

数据库:将"年/月/"+文件名 存储到数据表中

如 2017/8/言曌博客20170825164809907.jpg

二、导入 Jar 包

上传功能需要额外的两个 jar 包,如下

导入 环境中

我这里使用是 Maven,添加依赖

 <!--文件上传-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>

三、代码结构

文件上传到如图 uploads,如果你和博主也是使用了 Maven,文件其实是上传到

ForestBlog\target\ForestBlog\resource\uploads\2017\8 里面,这个没影响的。

但是要要记得在 clean 之前把 \target\ForestBlog\resource\uploads 文件复制到

src\main\ForestBlog\resource\uploads 中

四、代码实现

我们这里主要看上传部分代码,其他的配置文件也贴一下吧

1、springmvc 配置 (springmvc.xml部分代码)

 <!--文件上传-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--设置上传最大尺寸为5MB-->
<property name="maxUploadSizePerFile" value="5242880"/>
<property name="defaultEncoding" value="UTF-8"/>
<property name="resolveLazily" value="true"/>
</bean>

2、jsp 页面 (createUser.jsp部分代码)

3、控制器代码(UserController.java 中 添加用户类)

//添加用户提交
@RequestMapping(value = "/createUserSubmit",method = RequestMethod.POST)
public String createUserSubmit(UserCustom userCustom,MultipartFile upload_avatar ) throws Exception {
//上传图片
if(upload_avatar.getSize()!=0) {
String newFileName = functions.uploadFile(request,upload_avatar);
userCustom.setAvatar(newFileName);
}
userCustom.setLastloginip(functions.getIpAddr(request));
userService.createUser(userCustom);
return "redirect:userList.action";
}

4、上传文件代码 (functions.java 记得要注入)

 //上传文件
public String uploadFile(HttpServletRequest request,MultipartFile uploadFile) throws IOException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSS");
String res = sdf.format(new Date());
//uploads文件夹位置
String rootPath =request.getServletContext().getRealPath("/resource/uploads/");
//原始名称
String originalFilename = uploadFile.getOriginalFilename();
//新的文件名称
String newFileName = "言曌博客"+res+originalFilename.substring(originalFilename.lastIndexOf("."));
//创建年月文件夹
Calendar date = Calendar.getInstance();
File dateDirs = new File(date.get(Calendar.YEAR)
+ File.separator + (date.get(Calendar.MONTH)+1));
//新文件
File newFile = new File(rootPath+File.separator+dateDirs+File.separator+newFileName);
//判断目标文件所在的目录是否存在
if(!newFile.getParentFile().exists()) {
//如果目标文件所在的目录不存在,则创建父目录
newFile.getParentFile().mkdirs();
}
System.out.println(newFile);
//将内存中的数据写入磁盘
uploadFile.transferTo(newFile);
//完整的url
String fileUrl = date.get(Calendar.YEAR)+ "/"+(date.get(Calendar.MONTH)+1)+ "/"+ newFileName;
return fileUrl;
}

主要关注 上传文件的方法,属性注入这里就不赘述了

写的步骤很完整、清晰

https://liuyanzhao.com/5989.html

ssm整合-图片上传功能(转)的更多相关文章

  1. megapix-image插件 使用Canvas压缩图片上传 解决手机端图片上传功能的问题

    最近在弄微信端的公众号.订阅号的相关功能,发现原本网页上用的uploadify图片上传功能到手机端有的手机类型上就不能用了,比如iphone,至于为啥我想应该不用多说了吧(uploadify使用fla ...

  2. Ueditor图片上传功能的配置

    之前的项目中碰到过图片上传功能的配置问题,但是没有记录下来,今天有个朋友突然又问到了我这个问题,当时没想起来之前怎么解决的,后来看了Ueditor的官方文档才回想起来. 官网文档巨多,一般大家遇到问题 ...

  3. java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例

    java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例HttpClient 测试类,提供get post方法实例 package com.zdz.httpclient; i ...

  4. drupal中安装CKEditor文本编辑器,并配置图片上传功能 之 方法二

    drupal中安装CKEditor文本编辑器,并配置图片上传功能 之 方法一 中介绍了ckeditor的安装和配置方法,其实还有另一种新方法,不用IMCE模块. 不过需要ckfinder的JS库,可以 ...

  5. SSM实现图片上传管理操作

    Spring MVC 实现文件上传 时序图 利用 Spring MVC 实现文件上传功能,离不开对 MultipartResolver 的设置.MultipartResolver 这个类,你可以将其视 ...

  6. FLASH图片上传功能—从百度编辑器UEditor里面提取出来

    为了记录工作中碰到的各种问题,以及学习资料整理,今天开始,将以往的文章进行了一个整理,以后也开始认真的记录学习过程中的各种问题 在HTML里面的文件上传功能一直是个问题,为了实现上传文件大小限制,怎样 ...

  7. ssm实现图片上传

    在使用ssm完成前后端对接时,总免不了前台传过来的文件问题,而html中的<input>框直接使用时,往往会获取不到路径,今天在完成图片上传后的来做个总结 首先,前台页面 <!DOC ...

  8. Dede后台广告管理模块增加图片上传功能插件

    用户问题:网站广告后台管理非常方便,但是织梦后台的广告管理模块,发布广告时图片没有上传选项,只能用URL地址,很不方便,那么织梦帮就教大家一个方法实现广告图片后台直接上传,非常方便.先给大家看下修改后 ...

  9. 图片上传功能<转>http://blog.csdn.net/u011159417/article/details/50126023

    以前也实现过上传,只不过每次都是,写完之后没有总结,下次遇到时,还要重新写,重新调式,很是浪费时间,所以,今天实现一个上传图片的功能,包括简单的页面和servlet,下次再要写这个功能时,直接拿过来就 ...

随机推荐

  1. Kudu的优点

    不多说,直接上干货! Kudu目前具有以下优点  OLAP 工作的快速处理: 与 MapReduce,Spark 和其他 Hadoop 生态系统组件集成: 与 Apache Impala(incuba ...

  2. [Android]JsonObject解析

    android和服务器进行交互的时候往往会有数据的传输,而数据中有一种类型就是Json型,这两天在研究API接口的问题,服务器返回的数据类型都是Json型的.例如: 1.接收到的json字符串分为两种 ...

  3. Missing artifact jdk.tools:jdk.tools:jar:1.6

    今天从svn上面下载了一个mavan项目,出现Missing artifact jdk.tools:jdk.tools:jar:1.6 这个错误. 怎么解决了,在我的根pom.xml 下加入这个依赖就 ...

  4. Cannot convert value '0000-00-00 00:00:00' from column 1 to TIMESTAMP解决办法

    在Mysql数据库中使用DATETIME类型来存储时间,使用JDBC中读取这个字段的时候,应该使用 ResultSet.getTimestamp(),这样会得到一个java.sql.Timestamp ...

  5. PHP post & get请求

    <?php /** * HTTP 请求类 */ class HttpHelper { const METHOD_GET = 'GET'; const METHOD_POST = 'POST'; ...

  6. Hack Knowledges

    XSS(Cross-Site Scripting) Hacker PC -- upload XSS script to Web Server --> User PC Request for th ...

  7. 粗看ES6之数组

    标签: javascript es6 数组新增方法 map(可以理解为是映射,以一定规则修改数组每一项并返回全新数组) reduce(可以理解为是汇总,一堆出来一个) filter(可以理解为过滤,筛 ...

  8. BZOJ4503: 两个串(bitset字符串匹配)

    题意 题目链接 Sol Orz xudyh F个毛T啊..直接bitset一波就赢了啊...(虽然复杂度很假) 就是记录匹配串中每个元素出现的位置,将第\(i\)个位置的bitset右移\(i\)位后 ...

  9. React 内部属性与函数

    constructor 构造函数,在创建组件的时候调用一次. 例子: class TodoList extends React.Component { constructor(props, conte ...

  10. 零基础逆向工程34_Win32_08_线程控制_CONTEXT结构

    线程控制 实验 挂起线程 ::SuspendThread(hThread); 恢复线程 ::ResumeThread(hThread); 终止线程 (这里讲了同步调用与异步调用) 方式一: 此方法结束 ...