SpringBoot从入门到精通十一(SpringBoot文件上传的两种方法)
前言
在企业级项目开发过程中,上传文件是最常用到的功能。SpringBoot集成了SpringMVC,当然上传文件的方式跟SpringMVC没有什么不同。
本章目标
使用SpringBoot项目完成单个、多个文件的上传处理,并将上传的文件保存到指定目录下。这里我们会使用layui,如果有不懂layui的同行可以去layui官网
官网地址:https://www.layui.com/
项目构建
1.项目搭建的主要步骤我在这里就不多重复了,我们直接勾选Web依赖,然后生成项目,结构如下

form表单文件上传
单文件上传
1.由于SpringBoot的项目结构不同于SSM,很多企业也会用jsp页面,对我而言我不太喜欢,一般我们的jsp页面都是放在/src/main/webapp/WEB_INF/jsp,现在我们在这个目录先配置html,如果有需要配置jsp页面的同行把后缀名改一下就可以了,现在我们去application.properties中配置访问的页面以及目录,目录结构如下

2.application.properties配置如下
spring.mvc.view.prefix=/WEB_INF/jsp/ spring.mvc.view.suffix=.html
3.现在去控制器配置一下访问的页面,新建控制器IndexController,代码如下,然后启动运行
IndexController

package com.demo03.demo_03.controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; @Controller
public class IndexController {
@RequestMapping("/")
public String index(){
return "index";
}
}
4.现在我们访问一下页面,index.html代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>单图片上传</title>
</head>
<body>
<form action="" enctype="multipart/form-data" method="post">
<input type="file" name="file">
<input type="submit" value="图片上传">
</form>
</body>
</html>
5.现在我们去控制器编写代码,更新后的IndexController如下
package com.demo03.demo_03.controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.UUID; @Controller
public class IndexController {
@RequestMapping("/")
public String index(){
return "index";
}
//单图片上传
@RequestMapping("/upload")
@ResponseBody
public String upload(HttpServletRequest request, MultipartFile file){
try{
//上传目录地址
String uploadDir=request.getSession().getServletContext().getRealPath("/")+"upload/";
//判断目录是否存在,如果不存在则构建目录
File dir=new File(uploadDir);
if(!dir.mkdir()){
dir.mkdir();
}
//文件名后缀
String suffix=file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
//上传文件名
String fileName= UUID.randomUUID()+suffix;
//服务端保存的文件对象
File saveFile=new File(uploadDir+fileName);
//将上传的文件写入到服务器端文件内
file.transferTo(saveFile);
}catch (Exception e){
e.printStackTrace();
return "上传失败";
}
return "上传成功";
}
}
6.现在我们去index.html中上传图片,效果如下,可以看到我们图片上传成功了
index.html更新后
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>单图片上传</title>
</head>
<body>
<form action="/upload" enctype="multipart/form-data" method="post">
<input type="file" name="file">
<input type="submit" value="图片上传">
</form>
</body>
</html>

多文件上传
1.由于我们要用到多图片上传,所以我们先去控制器更新一下代码,更新后的IndexController代码如下
package com.demo03.demo_03.controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.UUID; @Controller
public class IndexController {
@RequestMapping("/")
public String index(){
return "index";
}
//单图片上传
@RequestMapping("/upload")
@ResponseBody
public String upload(HttpServletRequest request, MultipartFile file){
try{
//上传目录地址
String uploadDir=request.getSession().getServletContext().getRealPath("/")+"upload/";
//判断目录是否存在,如果不存在则构建目录
File dir=new File(uploadDir);
if(!dir.mkdir()){
dir.mkdir();
}
//文件名后缀
String suffix=file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
//上传文件名
String fileName= UUID.randomUUID()+suffix;
//服务端保存的文件对象
File saveFile=new File(uploadDir+fileName);
//将上传的文件写入到服务器端文件内
file.transferTo(saveFile);
}catch (Exception e){
e.printStackTrace();
return "上传失败";
}
return "上传成功";
}
//提取上传图片的公共方法
/*
* uploadDir 上传目录
* file上传对象
* */
public void executeUpload(String uploadDir,MultipartFile file) throws IOException {
//文件名后缀
String suffix=file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
//上传文件名
String fileName=UUID.randomUUID()+suffix;
//服务端保存文件对象
File saveFile=new File(uploadDir+fileName);
//将上传的文件写入到服务器端文件内
file.transferTo(saveFile);
}
//多文件上传
@RequestMapping("/uploadArray")
@ResponseBody
public String uploadArray(HttpServletRequest request,MultipartFile[] file){
try {
//上传目录地址
String uploadDir=request.getSession().getServletContext().getRealPath("/")+"upload/";
//如果目录不存在,则构建目录
File dir=new File(uploadDir);
if(!dir.exists()){
dir.mkdir();
}
//遍历文件数组执行上传
for(int i=0;i<file.length;i++){
if(file[i]!=null){
//调用上传的方法
executeUpload(uploadDir,file[i]);
}
}
}catch (Exception e){
e.printStackTrace();
return "上传失败";
}
return "上传成功";
}
}
2.更新index.html页面,发现上传成功,更新后的index.html如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>单图片上传</title>
</head>
<body>
<h2>单文件上传</h2>
<form action="/upload" enctype="multipart/form-data" method="post">
<input type="file" name="file">
<input type="submit" value="图片上传">
</form>
<h1>多个文件上传</h1>
<form action="/uploadArray" enctype="multipart/form-data" method="post">
<input type="file" name="file">
<input type="file" name="file">
<input type="file" name="file">
<input type="submit" value="图片上传">
</form>
</body>
</html>

SpringBoot从入门到精通十一(SpringBoot文件上传的两种方法)的更多相关文章
- C#实现Web文件上传的两种方法
1. C#实现Web文件的上传 在Web编程中,我们常需要把一些本地文件上传到Web服务器上,上传后,用户可以通过浏览器方便地浏览这些文件,应用十分广泛. 那么使用C#如何实现文件上传的功能呢?下面笔 ...
- curl文件上传有两种方式,一种是post_fileds,一种是infile
curl文件上传有两种方式,一种是POSTFIELDS,一种是INFILE,POSTFIELDS传递@实际地址,INFILE传递文件流句柄! );curl_setopt($ch, CURLOPT_PO ...
- springMVC文件上传的三种方法
这时:commonsmultipartresolver 的源码,可以研究一下 http://www.verysource.com/code/2337329_1/commonsmultipartreso ...
- 利用Selenium实现图片文件上传的两种方式介绍
在实现UI自动化测试过程中,有一类需求是实现图片上传,这种需求根据开发的实现方式,UI的实现方式也会不同. 一.直接利用Selenium实现 这种方式是最简单的一种实现方式,但是依赖于开发的实现. 当 ...
- linux 下文件上传的两种工具(XFTP5和Putty之pscp)方式
一.使用XFTP(,需要先在LINUX上安装启用FTP服务) 然后,在WINDOWS上启动XFPT6客户端,将下载的文件上传至LINUX 指定目录: 二.使用PUTTY软件安装目录下的PSCP命令 1 ...
- ASP.NET Core 1.0中实现文件上传的两种方式(提交表单和采用AJAX)
Bipin Joshi (http://www.binaryintellect.net/articles/f1cee257-378a-42c1-9f2f-075a3aed1d98.aspx) Uplo ...
- SpringBoot 2.x (3):文件上传
文件上传有两个要点 一是如何高效地上传:使用MultipartFile替代FileOutputSteam 二是上传文件的路径问题的解决:使用路径映射 文件路径通常不在classpath,而是本地的一个 ...
- ASP.NET文件上传的三种基本方法
ASP.NET依托.net framework类库,封装了大量的功能,使得上传文件非常简单,主要有以下三种基本方法. 方法一:用Web控件FileUpload,上传到网站根目录. <form i ...
- 让nginx支持文件上传的几种模式
文件上传的几种不同语言和不同方法的总结. 第一种模式 : PHP 语言来处理 这个模式比较简单, 用的人也是最多的, 类似的还有用 .net 来实现, jsp来实现, 都是处理表单.只有语言的差别, ...
随机推荐
- STL序列式容器之list
一,list容器基本概念 1.list容器基本知识 list容器的底部数据结构为双向链表,可以高效的进行插入和删除元素. list因为底层数据结构是双向链表,因此不支持下标操作和.at()函数的操作. ...
- wpf控件开发基础(3) -属性系统(2)
原文:wpf控件开发基础(3) -属性系统(2) 上篇说明了属性存在的一系列问题. 属性默认值,可以保证属性的有效性. 属性验证有效性,可以对输入的属性进行校验 属性强制回调, 即不管属性有无发生变化 ...
- 北大SQL数据库视频课程笔记
Jim Gray - Transaction processing: concepts and techniqueshttp://research.microsoft.com/~gray/ 事务概念 ...
- WPF 3D中多个模型如何设置某一个在最前?
原文:WPF 3D中多个模型如何设置某一个在最前? 问题:我们的模型包括导入的3D solid模型和axis坐标轴模型,当模型旋转的时候,3D会将axis挡住. 期望:axis一直在最前面,不会被3D ...
- Hibernate4与hibernate3有错误的版本号的主要区别所造成的不一致
Hibernate版本号修改 Hibernate4的修改较大仅仅有spring3.1以上版本号可以支持,Spring3.1取消了HibernateTemplate,由于Hibernate4的事务管理已 ...
- springboot 上传图片
1. 创建多层目录 创建多层目录要使用File的mkdirs()方法,其他可以使用mkdir()方法. 2. 文件大小限制 配置文件中,在spring1.4以后要使用 ` spring.http.mu ...
- WPF 窗体显示最前端
原文:WPF 窗体显示最前端 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/jjx0224/article/details/8782845 如何做一 ...
- FFmpeg来源简单分析:结构会员管理系统-AVClass
===================================================== FFmpeg章列表: [架构图] FFmpeg源码结构图 - 解码 FFmpeg源码结构图 ...
- android 随着认识的去除率EditText(它配备了防抖效果)
Android它没有提供的类似至ios自带的输入框效果清晰(ios简单地只加属性可实现).因此,Android其中 我们要如何实现就需要这种效果用自己的定义的控件实现. 思路:能够使用一个Linear ...
- android 玩愤怒的小鸟等游戏的时候全屏TP失败
1.tp driver的tpd_down()和tpd_up()函数不需要进行报告id号码.自己主动顶级赛: 2.tpd_up()功能只需要报告BTN_TOUCH和mt_sync信息,其他信息未报告,如 ...