SpringBoot学习05(2.1整合项目2:升级点文件上传阿里云OSS,分页插件以及日志信息)

发布时间 2023-10-12 21:36:41作者: 201812

在项目一的基础开发上升级点:

1.(表现层)不再使用systemout输出一些信息,而是在日志中输入,lombok中有提供响应的方法可以通过加入注解@Slf4j,就可以直接使用log.info("")更新日志信息。

2.(分页)配置新插件Pagehelper

在pom.xml中引入依赖,要根据自己的jdk版本来选择对应的版本

        <!--    PageHelper依赖-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.1</version>
        </dependency>

 3.文件上传

前端页面:在表单中要写这个属性

<form method = "post"  enctype = "multipart/form-data">

  <input type = "file" name="image">

</form>

服务端接受文件:

MultipartFile image

存储方式:本地存储和云存储

云存储阿里云OSS:需要先加入阿里云官网,进行注册登录,进入控制台,点击左上角,然后查找oss,第一次使用是没有东西的需要开通,根据自己需求选择是否购买,我并没有选择购买

 创建bucket

 

 获取密钥

 创建密钥的时候要记住密码,不然不能查看了

 

查找官方文档SDK编写入门文件上传程序

官方文档: SDK参考_对象存储 OSS-阿里云帮助中心 (aliyun.com)

 找到官方文档的上传文件流,进行复制粘贴

 

 

 

 

运行Demo

代码:Demo

package com.example;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.FileInputStream;
import java.io.InputStream;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "https://oss-cn-beijing.aliyuncs.com";
        // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
//        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        String accessKeyId = "";
        String accessKeySecret = "";

        // 填写Bucket名称,例如examplebucket。
        String bucketName = "web-tlias29";
        // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
        String objectName = "1.jpg";
        // 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。
        // 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
        String filePath= "D:\\images\\1.jpg";

        // 创建OSSClient实例。
//        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);


        try {
            InputStream inputStream = new FileInputStream(filePath);
            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
            // 创建PutObject请求。
            PutObjectResult result = ossClient.putObject(putObjectRequest);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
} 

 

项目集成OSS

 

 

postman测试成功,进入阿里云上面查看,也发现上传文件成功

 

 

 

 总代码

 

 UploadController.java

package com.example.controller;


import com.example.entity.Result;
import com.example.utils.AliOSSUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

@Slf4j
@RestController
public class UploadController {

    //输入Component
    @Autowired
    private AliOSSUtils aliOSSUtils;

    @PostMapping("/upload")
    public Result upload(MultipartFile image) throws IOException {
        log.info("文件上传,文件名: {}", image.getOriginalFilename());

        //调用阿里云OSS工具类进行上传
        String url = aliOSSUtils.upload(image);

        log.info("文件上传完成,文件访问的url为:{}",url);

        return Result.success(url);

    }

}

 

AliOSSUtils.java

package com.example.utils;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.util.UUID;

/**
 * 阿里云 OSS 工具类
 */

@Component
public class AliOSSUtils {

    private String endpoint = "https://oss-cn-beijing.aliyuncs.com";
    private String accessKeyId = "";
    private String accessKeySecret = "";
    private String bucketName = "web-tlias29";

    /**
     * 实现上传图片到OSS
     */
    public String upload(MultipartFile file) throws IOException {
        // 获取上传的文件的输入流
        InputStream inputStream = file.getInputStream();

        // 避免文件覆盖
        String originalFilename = file.getOriginalFilename();
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));

        //上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        ossClient.putObject(bucketName, fileName, inputStream);

        //文件访问路径:上传到阿里云OSS的文件,可以通过https://bucketName.oss-cn-beijing.aliyuncs.com/fileName
        String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
        // 关闭ossClient
        ossClient.shutdown();
        return url;// 把上传到oss的路径返回
    }

}