温馨提示

Spring Boot会员管理系统的中,需要涉及到Spring框架,SpringMVC框架,Hibernate框架,thymeleaf模板引擎。所以,可以学习下这些知识。当然,直接入门的话使用是没问题,但是,涉及到一些异常和原理的话可能就有些困难。

1. 前端部分

在前端部分addMember.html是通过form表单来提交会员的信息,其中就包括了图片上传功能(这里涉及了文件上传操作),表单部分代码如下:

<form th:action="@{/admin/addMember}" method="post" enctype="multipart/form-data" id="addMember">
<div class="file-field input-field">
<div class="btn">
<span>选择头像文件</span>
<input id="file" type="file" name="iconPath" multiple="" placeholder="选择文件" accept="image/*" onchange="changeToop()">
</div>
<div class="file-path-wrapper">
<!--<input class="file-path validate" type="text" placeholder="Upload one or more files">-->
<img id="myimg" src="assets/iconPath/common.jpg" class="img-responsive img-thumbnail" style="width: 20%;height: 20%" />
</div>
<!--头像文件上传预览-->
<script>
function Id(id){
return document.getElementById(id);
}
function changeToop(){
var file = Id("file");
if(file.value===''){
//设置默认图片
Id("myimg").src='assets/iconPath/common.jpg';
}else{
preImg("file","myimg");
}
}
//获取input[file]图片的url Important
function getFileUrl(fileId) {
var url;
var file = Id(fileId);
var agent = navigator.userAgent;
if (agent.indexOf("MSIE")>=1) {
url = file.value;
} else if(agent.indexOf("Firefox")>0) {
url = window.URL.createObjectURL(file.files.item(0));
} else if(agent.indexOf("Chrome")>0) {
url = window.URL.createObjectURL(file.files.item(0));
}
return url;
}
//读取图片后预览
function preImg(fileId,imgId) {
var imgPre =Id(imgId);
imgPre.src = getFileUrl(fileId);
}
</script>
</div> ....... </form>

这里有一个注意事项:因为涉及文件上传,所以在form中需要加入enctype="multipart/form-data",而且就是input中的name属性是与后端中的Controller映射方法的传入参数名是一一对应的。

2. 后端代码实现

后端中对于SpringMVC框架可以对于文件进行处理然后我们可以通过传入参数的方式来接收文件

2.1 Controller处理传入文件

代码如下:

@PostMapping("/addMember")
public String addMember(Member member, String gradeName, MultipartFile icon, Map<String, Object> model) {
//处理上传文件
try {
if (icon == null)//首先判断上传文件不为null
return "error";
if (icon.getOriginalFilename().equals("")) //如果上传文件的原名为空字符串,则证明使用了默认图像
member.setIconPath("/assets/icon/common.jpg"); //设置为我们的默认图像路径
else
//这里通过了自己编写的文件上传工具类来处理上传的MultipartFile,文件名设置为通过UUID产生的字符串
member.setIconPath(FileUploadUtil.upload(icon, "/assets/icon/", UUIDRandomUtil.get32UUID()));
} catch (Exception e) {
e.printStackTrace();
return "error";
} ....... return "addMemberSuccess";
}
2.2 FileUploadUtil工具类保存文件

Controller的MultipartFile文件传入后需要进一步,转变为FIle并且保存到磁盘当中,所以我分开处理,把Controller的传入文件交给FileUploadUtil工具类来处理,具体的代码如下:

public class FileUploadUtil {

    /**
* 上传文件
* @param multipartFile multipartFile
* @param prefixPath 前缀路径
* @param fileName 上传后的文件名
* @return 上传后最终的相对路径+文件名
* @throws Exception 有可能空指针异常和IO异常
*/
public static String upload(MultipartFile multipartFile, String prefixPath, String fileName) throws Exception {
//得出上传的绝对路径
String uploadPath = ClassUtils.getDefaultClassLoader().getResource("").getPath() +"/static"+ prefixPath;
File file = new File(uploadPath);
if (!file.exists())
if (file.mkdirs())
System.out.println("成功创建目录");
//获取上传的后缀名
String suffixName = multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().lastIndexOf("."));
//新建最终确定的文件
file = new File(uploadPath+fileName+suffixName);
multipartFile.transferTo(file);
return prefixPath+fileName+suffixName;
} }

上面中的ClassUtils是Spring提供的一个工具类,而调用方法getDefaultClassLoader().getResource("").getPath()是获取当前项目classpath下的路径。

以上便是本系统中关于文件上传的部分内容,该系统的源码以上传GitHubCSDN资源

Spring Boot会员管理系统——处理文件上传的更多相关文章

  1. 从零开始的Spring Boot(3、Spring Boot静态资源和文件上传)

    Spring Boot静态资源和文件上传 写在前面 从零开始的Spring Boot(2.在Spring Boot中整合Servlet.Filter.Listener的方式) https://www. ...

  2. Spring Boot 2.X 实现文件上传(三)

    使用 SpringBoot 项目完成单个.多个文件的上传处理,并将上传的文件保存到指定目录下. 代码演示案例 所有的 HTML 页面文件 index.html <!DOCTYPE html> ...

  3. spring boot下MultipartHttpServletRequest如何提高上传文件大小的默认值

    前言: 上传下载功能算是一个非常常见的功能,如果使用MultipartHttpServletRequest来做上传功能. 不配置上传大小的话,默认是2M.在有些场景,这个肯定不能满足条件. 上传代码: ...

  4. Spring提供的API实现文件上传

    Spring为我们提供了文件上传接口MultipartRequest及其实现类StandardMultipartFile StandardMultipartFile是StandardMultipart ...

  5. Spring Boot+BootStrap fileInput 多图片上传

    一.依赖文件 <link rel="stylesheet" type="text/css" th:href="@{/js/bootstrap/c ...

  6. Spring中使用StandardServletMultipartResolver进行文件上传

    从Spring3.1开始,Spring提供了两个MultipartResolver的实现用于处理multipart请求,分别是:CommonsMultipartResolver和StandardSer ...

  7. spring mvc 3.0 实现文件上传功能

    http://club.jledu.gov.cn/?uid-5282-action-viewspace-itemid-188672 —————————————————————————————————— ...

  8. springMVC+spring+mybatis整合(包括文件上传和下载)

    driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncod ...

  9. Spring MVC4使用Servlet3 MultiPartConfigElement文件上传实例

    在这篇文章中,我们将使用Spring MultipartResolver 实现 StandardServletMultipartResolver在Servlet3环境中实现单点和多文件上传功能.Spr ...

随机推荐

  1. 关于Devexpress15.2中GridControl控件选择字段ColumnEdit下拉时间设置

    效果:点击表格GridControl控件中的列,可以显示日期和时间.时间可以手动修改.(绑定日期格式的字段) 设置步骤:1.点击时间字段列表设置ColumnEdit-New-选择DateEdit出现r ...

  2. 使用sed删除拼音的音调

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  3. scrapy回调函数传递参数

    scrapy.Request 的callback传参的两种方式 1.使用 lambda方式传递参数 def parse(self, response): for sel in response.xpa ...

  4. activiti怎么实现用户自定义流程?请先看这里

    最近一两个星期收到了好几个qq好友添加的请求和csdn的私信,里面基本都是询问activiti相关的问题. 尤其是今天有个朋友给我发了私信,内容如下: 你好,请问你关于activiti工作流的问题:怎 ...

  5. jsp页面报错(一)

    jsp页面报错 1.错误位置 <form action="../page/areaType.action" method="POST"> <j ...

  6. 【linux】安装mysql出现 no curses错误解决方法

    安装mysql,在./configure时出现错误:error: No curses/termcap library found的解决办法 mysql版本:5.1.30 已经不记得这次是第几次安装my ...

  7. FAT32文件系统的存储组织结构(二)

    前面已经基于一个格式化的空U盘分析了一下FAT32文件系统存储的组织结构,下面我们从文件操作的角度来分析一下文件系统的运作机制.由于换了个U盘,所以仍然贴出刚格式化的空U盘的几个重要的数据区如下:   ...

  8. ArgumentError:Error #2004:某个参数无效

    1.错误描述 ArgumentError:Error #2004:某个参数无效 at flash display::Graphics/drawRect() at ZeroClipboard() 2.错 ...

  9. javaWeb学习之Listener监听

    ] 一.监听器Listener javaEE包括13门规范 在课程中主要学习 servlet技术 和 jsp技术 其中 servlet规范包括三个技术点:servlet  listener  filt ...

  10. 谈下spring下的 aop日志记录

    在我们开发当中  我们需要对系统用户行为和 系统异常信息有个统一记录  以便后期的 用户行为分析和bug修复   当我们有这个需求时  我们的通常采取方式很多 1.比如我们定义一个规范 开发一个接口 ...