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
0
投稿
猜你喜欢
- FastDFS 的作者余庆先生已经为我们开发好了 Java 对应的 SDK。这里需要解释一下:作者余庆并没有及时更新最新的 Java SDK
- Java 里的 * 是动态拦截 action 调用的对象,它提供了一种机制可以使开发者可以定义在一个 action 执行的前后执行的代码,也
- 前言我们一说到spring,可能第一个想到的是 IOC(控制反转) 和 AOP(面向切面编程)。没错,它们是spring的基石,得益于它们的
- 图像滤波在opencv中可以有多种实现形式自定义滤波如使用3×3的掩模:对图像进行处理.使用函数filter2D()实现#include&l
- 简介JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案。JSON Web Token 入门教程 这篇文章可以帮你了解
- throw抛出异常的方式比较直接:if(age < 0){throw new MyException("年龄不能为负数!&q
- 前言无论Spring的XML配置或者Java配置,都可以配置自动扫描,也就是在指定包及其子包下的component,都会被自动扫描并被Spr
- Java IO BufferedInputStream概要:BufferedInputStream是缓冲输入流,继承于Filte
- 前言注解(Annotation)不是程序,但可以对程序作出解释,也可以被其它程序(如编译器)读取。注解的格式:以@注释名在代码中存在,还可以
- 相信不少喜欢开发的朋友都已经知道微信小程序是个什么物种了,楼主也是从小程序内测期间就开始关注,并且也写过几个已经上线的微信小程序。但是基本上
- 概述归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有
- java事件机制中包含下述三要素:1、事件,发生了什么事,比如用户在界面上的一个操作(手势滑动屏幕),当一个事件发生的时候,该事件用一个事件
- 前言博主之前有写过关于递归问题的思维模式:递归的思路下面将用这种思维模式来求解经典汉诺塔问题。一、问题描述汉诺塔(又称河内塔)问题是源于印度
- 在8 里面Lambda是最火的主题,不仅仅是因为语法的改变,更重要的是带来了函数式编程的思想,我觉得优秀的程序员,有必要学习一下函数式编程的
- 1、@RequestMapping@RequestMapping 既可以用在类级别,也可以用在方法级别,当它定义在类级别的时候,标明该控制器
- 先对Spring SpringMVC和Mybatis单独进行配置,最后对三者进行整合配置Spring实际使用中,一般会使用注解+xml配置来
- 线程的两种创建方式及优劣比较1、通过实现Runnable接口线程创建(1).定义一个类实现Runnable接口,重写接口中的run()方法。
- 错误处理到目前为止,我们都没怎么介绍onComplete()和onError()函数。这两个函数用来通知订阅者,被观察的对象将停止发送数据以
- 这篇文章主要介绍了Java实现inputstream流的复制代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习
- spring中事务处理原理 利用aop生成代理对象执行带有Transactional事务注解的