SpirngBoot_04

一. SpringBoot分页查询

1. 加jar包

​
<!-- 分页插件 -->
    <dependency>
      <groupId>com.github.pagehelper </groupId>
      <artifactId>pagehelper-spring-boot-starter</artifactId>
      <version>1.4.3</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层

9975049d47c04f37b48db081a6b7a470.png

二. 文件上传

        *文件上传必须使用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>

注意!!!!! 

58ca7f6fa16347e78492b12783494a92.png 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();
        }
    }
}

5abd4ae3f1fb4c18848c4ef7fdb67108.png

 3. 编写Controller层

@RestController
@RequestMapping("upload")
public class UploadController {
    @Resource
    private UploadService uploadService;
    // 文件上传必须使用post请求
    @PostMapping
    public Result upload(MultipartFile dys) {
        uploadService.upload(dys);
        return Result.success("成功");
    }
}

02e72f8589f042519ab20d52f195e3c3.png

三. 使用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" onclick="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存储

地址: OSS管理控制台 (aliyun.com)icon-default.png?t=N7T8https://oss.console.aliyun.com/bucket

我们创建的存储空间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核心配置

                首先在application.yml配置中设置上传文件大小

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包下面

package com.aaa.util;

import com.aaa.result.FileUploadResult;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClient;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.UUID;
@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层开始调用
package com.aaa.Controller;

import com.aaa.result.FileUploadResult;
import com.aaa.util.UseOss;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;

@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就代表上传成功

 去阿里云查看 ---- 上传成功

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值