SpringBoot实现单文件与多文件上传功能
作者:UnIQUE?Eason 发布时间:2023-03-22 23:44:11
标签:SpringBoot,单文件,多文件,上传,功能
1.单文件上传
首先创建一个Spring Boot
项目,并添加spring-boot-starter-web
依赖
然后创建一个upload.jsp
文件,做一个简单的文件上传页面,具体代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/wjsc/upload" method="post" enctype="multipart/form-data">
<input type="file" value="请选择文件" name="uploadFile">
<input type="submit" value="点击上传">
</form>
</body>
</html>
上传接口是wjsc/upload
,注意请求方法是post
,enctype
是multipart/form-data
然后创建上传文件接口:
@RequestMapping("/wjsc")
@RestController
public class UploadController {
/**
* 文件上传
*/
@PostMapping("/upload")
//MultipartFile接受前台传过来的文件
public String upload(MultipartFile uploadFile,HttpServletRequest req){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd/");
//设置上传文件的保存路径为项目运行目录下的uploadFile文件夹
String realPath = req.getSession().getServletContext().getRealPath("/uploadFile/");
//获取当前日期对所上传的文件进行归类保存
String format = sdf.format(new Date());
File folder = new File(realPath+format);
if (!folder.isDirectory()){//判断是否为目录
folder.mkdirs();//不是目录就创建目录
}
//给上传的文件重命名
String oldName = uploadFile.getOriginalFilename();//获取文件名称
String newName = UUID.randomUUID().toString()+oldName.substring(oldName.lastIndexOf("."),oldName.length());//设置新文件名
try{
//文件保存操作
uploadFile.transferTo(new File(folder,newName));
//生成文件访问路径
String filePath = req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+"/uploadFile/"+format+newName;
return filePath;
}catch (Exception e){
e.printStackTrace();
}
return "上传失败";
}
}
注意:MultipartFile变量名命名要与jsp中上传文件的name一致,不然会接收不到文件
最后测试:
运行项目,在浏览器中访问upload.jsp
页面进行文件上传
上传成功后会返回文件访问路径,用这个路径就可以访问到刚刚上传的图片
2.多文件上传
多文件上传和单文件上传基本一致,首先修改jsp文件,代码如下:
%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/wjsc/upload" method="post" enctype="multipart/form-data">
<input type="file" value="请选择文件" name="uploadFiles" multiple>
<input type="submit" value="点击上传">
</form>
</body>
</html>
然后修改上传文件接口:
/**
* 多文件上传
*/
@PostMapping("/uploads")
public String uploads(MultipartFile[] uploadFiles,HttpServletRequest req) {
//遍历uploadFiles数组分别储存
}
控制器里边的核心逻辑和单文件上传是一样的,只是多一个遍历的步骤。
来源:https://blog.csdn.net/weixin_47390965/article/details/122326369


猜你喜欢
- 一、什么是Memcached?Memcached是danga.com开发的分布式内存对象缓存系统,所谓分布式,意味着它不是本地的,而是基于网
- 1、右值1.1 简介首先区分一下左右值:左值是指存储在内存中、有明确存储地址(可取地址)的数据;右值是指可以提供数据值的数据(不可取地址)如
- 一、校验分类数据的校验一般分为**前端校验、后端校验**二、前端校验前端校验是最为明显的,先说一下:① HTML非空校验 如 HTML5 新
- 折半查找法仅适用于对已有顺序的数组、数据进行操作!!!(从小到大)自我总结:折半查找法就是相当于(通过改变low或high的大小)把中间位置
- FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写FreeMarker被设计用来生成HTML Web
- 前言之前我们探讨过一个.class文件是如何被加载到jvm中的。但是jvm内又是如何划分内存的呢?这个内被加载到了那一块内存中?jvm内存划
- a.在.xaml文件中拖入一个datagrid,然后添加列名,使用Binding="{Binding 数据库中的列名称}"
- 前言继上次skywalking出故障《解析Arthas协助排查线上skywalking不可用问题》不到一个月,线上skywalking又出毛
- 前言: 在命令行中输入可以输入各类参数,本文将针对这些参数做一个小结。基于命令行输入参数测试程序如下:import java.util.Ar
- 本文实例讲述了C#实现多线程的Web代理服务器。分享给大家供大家参考。具体如下:/**Proxy.cs:C# Programming Tip
- 本文实例讲述了Android获取手机电池电量用法。分享给大家供大家参考。具体如下:原理概述:手机电池电量的获取在应用程序的开发中也很常用,A
- 1.基本概念首先我们需要弄清楚几个概念:面向对象是什么、类是什么、对象又是什么?还是逐个来说1.1面向对象我们常说Java是面向对象的语言,
- 本文实例为大家分享了java文件上传和预览实现代码,供大家参考,具体内容如下1、下载uploadify插件2、index.html<!
- 在方法声明中只允许一个paras关键字,并且该关键字只能为最后一个。using System; /*********************
- 本文为大家分享Android自定义Spinner适配器的相关知识点,供大家参考,具体内容如下一、大致效果二.关键代码在注释中讲重点吧。 (1
- 什么是Java垃圾回收器Java垃圾回收器是Java虚拟机(JVM)的三个重要模块(另外两个是解释器和多线程机制)之一,为应用程序提供内存的
- SpringBoot Admin 实现Actuator端点可视化监控简介Actuator可视化监控SpringBoot AdminNote:
- 前言Inotify会对工程内的所有文件夹设置”watch handle”。不幸的是,Linux默认的watch handle的限值不能满足实
- 本文实例讲述了JAVA设计模式之建造者模式定义与用法。分享给大家供大家参考,具体如下:建造者模式:将复杂对象的构造与它的实现相分离,让相同的
- 我们知道,编写一个Java程序后,如果想让自己编写的代码可以正常运行,我们便需要对它进行编译和运行,而Java环境变量的配置就显得尤为重要,