1.SpingBoot分页查询
Spring Boot整合持久层
整合持久层也就是把自己写的代码与数据库中的数据连接起来而实现某种业务,主要就是编写相关的实体类、接口、映射文件以及service层的代码
在pom里面加分页依赖
<!-- 分页插件 --> <dependency> <groupId>com.github.pagehelper </groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.4.7</version> </dependency>
2.创建分页操作的类
创建完这一次之后就不用重新写了
package com.aaa.entity; public class MyPage { // 设置默认值 private Integer currPage=1; private Integer pageSize=10; public MyPage(Integer currPage, Integer pageSize) { this.currPage = currPage; this.pageSize = pageSize; } public MyPage() { // 设置默认值 this.currPage = 1; this.pageSize = 10; } public Integer getCurrPage() { return currPage; } public void setCurrPage(Integer currPage) { this.currPage = currPage; } public Integer getPageSize() { return pageSize; } public void setPageSize(Integer pageSize) { this.pageSize = pageSize; }
3. 编写Controller层
二. 文件上传
*文件上传必须使用Post请求
*文件上传属于业务所以写在Service层 通过Controller进行访问
*文件上传问题是同名字文件(图片)提交的话第二个会将第一个直接覆盖具体解决下方代码中有注释
1.创建jsp页面
Created by IntelliJ IDEA. User: 31405 Date: 2024/5/27 Time: 16:14 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <form method="post" enctype="multipart/form-data" action="/upload"> 文件: <input type="file" name="dys"> <input type="submit" value="提交"> </form> </body>
注意!!!!!
2. 编写Service
所有的业务都写在Service
1.Service层
package com.aaa.service; import org.springframework.web.multipart.MultipartFile; public interface UploadService { void upload(MultipartFile dys); }
2.ServiceImp实现以及编写代码
package com.aaa.service.impl; import com.aaa.service.UploadService; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; /** * 文件上传有一个问题是 如果上传两个名字相同的图片 * 那么第二个图片会直接将第一个图片覆盖掉 * 所以需要解决这个问题 具体解决办法以及注释下方可见 */ @Service public class UploadServiceImpl implements UploadService { @Value("${spring.servlet.multipart.location}") private String uploadPath; // D:\\APP\\upload\\ @Override public void upload(MultipartFile dys) { // 选择的文件名字 String originalFilename = dys.getOriginalFilename(); // 获取当前时间的毫秒数 long l = System.currentTimeMillis(); // 截取原来文件名字的后缀 如: a.jsp 截取 .jsp int i = originalFilename.indexOf("."); // 根据截取 将 .jsp 存储到substring中 String substring = originalFilename.substring(i); // 将选择的文件的原名字跟时间拼接到一起 成为上传文件的新名字 File file = new File(uploadPath,"DYS"+l+substring); try { dys.transferTo(file); } catch (IOException e) { e.printStackTrace(); } } }
3. 编写Controller层
2.ServiceImp实现以及编写代码
@RestController @RequestMapping("upload") public class UploadController { @Resource private UploadService uploadService; // 文件上传必须使用post请求 @PostMapping public Result upload(MultipartFile dys) { uploadService.upload(dys); return Result.success("成功"); } }
三. 使用ajax请求进行SpringBoot文件上传
相对于普通的文件上传 ajax请求文件上传跟后台没有进行任何改变 只有将前端的form表单转为ajax请求,具体后台请看上方↑
<%-- Created by IntelliJ IDEA. User: 31405 Date: 2024/5/27 Time: 16:14 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <%-- 通过ajax请求文件上传 文件上传必须使用post请求 enctype="multipart/form-data" 用来支持文件上传--%> <form method="post" id="forData" enctype="multipart/form-data" action="/upload"> <%-- accept="image/* 用来设置只显示图片文件 --%> 文件: <input type="file" name="dys" accept="image/*"> <%-- 使用ajax请求type类型从submit改为button --%> <input type="button" οnclick="upload()" value="提交"> </form> <script src="resouces/jquery-2.1.0.js"></script> <script> function upload() { var forData = new FormData($("#forData")[0]); $.ajax({ url:"/upload", data:forData, /** * 必须设置contentType为false 才会自动添加Content-Type */ contentType: false, /** * processData 设置发送数据是否转换为对象 默认是true自动转换 设定为false不希望被转换 */ processData: false, type:"post", success: function (data) { console.log(data); } }) } </script> </body> </html>
四. 文件上传到阿里云OSS对象存储
一. 注册阿里云账号
支付宝可一键注册认证
二. 创建OSS存储
地址:
我们创建的存储空间Bucket 和 Endpoint 这个后面的地址是需要记住的后面需要使用当然背不下来也没事还有地方可以找到
这里就是我们存放文件的地方 在这里创建一个文件夹 名为 images
在这里我们需要有两个密钥:
当您请求访问OSS时,OSS通过使用访问密钥(AccessKey ID和AccessKey Secret)对称加密的方法来验证某个请求的发送者身份
点进去创建一个AccessKey怕忘记可以将生成的保存起来
完成这些操作之后下面就要打开IDEA准备操作了
三. 创建IDEA项目
1.构建项目
过程........
2.添加 oss jar包 pom依赖
<!--oss存储--> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>2.8.3</version> </dependency> <dependency>
3.设置application核心配置
spring:
servlet:
multipart:
max-file-size: 10MB
max-request-size: 10MB
4.创建实体类来统一格式
@Data
public class FileUploadResult {
// 文件唯一标识
private String uid;
// 文件名
private String name;
// 状态 有:uploading done error removed
private String status;
// 服务端响应内容
private String response;
}
4.将oss封装成一个工具类
所有代码写在util包下面
@Component
public class UseOss {
//你自己的oss存储的地址
private final String ENDPOINT="oss-cn-beijing.aliyuncs.com";
//这两个密钥是用于身份认证
private static final String ACCESSKEYID="LTAI5tBKVDW3x38gzuzyXgE4";
private static final String ACCESSKEYSECRET="bRE4zBw5qjejKtKsvStkJoZ2hp8Sgi";
//存储空间的名字
private static final String BUCKETNAME="zsz-test";
//路径前缀
private static final String URLPREFIX="http://zsz-test.oss-cn-beijing.aliyuncs.com/";
//创建一个oss的示例对象
private OSS oss=new OSSClient(ENDPOINT, ACCESSKEYID, ACCESSKEYSECRET);
//创建一个允许上传的格式
private static final String[] IMAGE_TYPE = new String[]{".bmp", ".jpg", ".jpeg", ".gif", ".png"};
// 文件上传
public FileUploadResult uploadFIle(MultipartFile uploadFile){
// 设置一个自变量
boolean isLegal = false;
// 上传过来的照片已上方写好的 IMAGE_TYPE 做比较 如果上传过来的照片后缀是IMAGE_TYPE类型的酒返回True
for (String type:IMAGE_TYPE){
// 判断上传的文件的格式是否与我们设定的上传格式相同
if (StringUtils.endsWithIgnoreCase(uploadFile.getOriginalFilename(),type));
isLegal = true;
break;
}
// 封装Result对象, 并且将文件byte数组放入result对象中
FileUploadResult fileUploadResult = new FileUploadResult();
// 判断 如果该照片不是我们想要的格式 直接设置实体类的状态并返回
if (!isLegal){
fileUploadResult.setStatus("error");
return fileUploadResult;
}
// 到当前这个位置 说明照片已经满足所有条件
// 获取文件名字
String fileName = uploadFile.getOriginalFilename();
System.out.println("fileName"+fileName); // 全名+路径
// 照片存储的位置
String filePath = getFilePath(fileName); // 文件真实存储路径 ---- 会在下方创建私有类
System.out.println("filePath"+filePath);
// 上传到阿里云
// 根据Bucket的名字确定是哪一个存储空间 filePath存储在存储空间的哪一个位置 以流的形式 将uploadFile写入到filePath
try {
oss.putObject(this.BUCKETNAME, filePath, new ByteArrayInputStream(uploadFile.getBytes()));
} catch (IOException e) {
e.printStackTrace();
// 上传失败
fileUploadResult.setStatus("error");
return fileUploadResult;
}
//补充实体类
fileUploadResult.setStatus("dnoe");
fileUploadResult.setResponse("success");
//this.aliyunConfig.getUrlPrefix() + filePath 文件路径需要保持数据库
//this.aliyunConfig.getUrlPrefix()+filePath 访问照片的真实路径
fileUploadResult.setName(this.URLPREFIX + filePath);
fileUploadResult.setUid(String.valueOf(System.currentTimeMillis()));
return fileUploadResult;
}
private String getFilePath(String fileName) {
// 获取到文件后缀
int index = fileName.lastIndexOf(".");
String suffix = fileName.substring(index);
// 生成了一个新路径
// 在我们存储空间下的images/+ UUID.randomUUID()随机数 +文件后缀名 进行存储
return "images/" + UUID.randomUUID() + suffix;
}
}
5. 编写Controller层开始调用
@RestController
@RequestMapping("/upload")
public class UploadController {
@Resource
private UseOss useOss;
@PostMapping
public FileUploadResult upload(MultipartFile uploadFile){
FileUploadResult fileUploadResult = useOss.uploadFIle(uploadFile);
return fileUploadResult;
}
}
6.运行
点击上传提示success就代表上传成功
去阿里云查看 ---- 上传成功