IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 集成阿里云OSS编写AliyunOSSUtil -> 正文阅读

[开发测试]集成阿里云OSS编写AliyunOSSUtil

集成阿里云OSS编写AliyunOSSUtil

我们通过调用官方SDK方式集成
阿里云SDK:https://help.aliyun.com/document_detail/32008.htm?spm=a2c4g.11186623.2.6.5032f2eekNXgW7#concept-32008-zh

1、引入sdk依赖

  • pom.xml
 <dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.10.2</version>
</dependency>

2、添加yml配置文件

  • application.yml
oss:
  bucket: 你的bucket
  endPoint: https://oss-cn-shenzhen.aliyuncs.com
  accessKeyId: 你的 accessKeyId
  accessKeySecret: 你的 accessKeySecret

3、编写 AliyunOSSUtil文件

3.1 多例模式

package com.mtl.aliyunoss.utils;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.io.*;
import java.net.URL;
import java.util.Calendar;

/**
 * Aliyun OSS上传工具类
 */
@Component
public class AliyunOSSUtil {

    private static String BUCKET_NAME;

    private static String KEY_ID;

    private static String KEY_SECRET;

    private static String END_POINT;

    private static final int URL_EXPIRATION = 365 * 10;

    @Value("${oss.bucket}")
    private String bucketName;

    @Value("${oss.endPoint}")
    private String accessEndPoint;

    @Value("${oss.accessKeyId}")
    private String accessKeyId;

    @Value("${oss.accessKeySecret}")
    private String accessKeySecret;

    @PostConstruct
    public void init() {
        BUCKET_NAME = bucketName;
        END_POINT = accessEndPoint;
        KEY_ID = accessKeyId;
        KEY_SECRET = accessKeySecret;
    }

    /**
     * 打开ossClient
     *
     * @reutrn ossClient ossClient
     */
    private static OSS getOSSClient() {
        OSS ossClient = new OSSClientBuilder().build(END_POINT, KEY_ID, KEY_SECRET);
        System.out.println(ossClient);
        return ossClient;
    }

    /**
     * OSS上传文件-InputStream
     *
     * @param allPathFile OSS上传的全路径路径+文件名称(/111/1.png)
     * @param inputStream 上传的文件流
     */
    public static void uploadFile(String allPathFile, InputStream inputStream) {
        OSS ossClient = getOSSClient();

        try {
            ossClient.putObject(BUCKET_NAME, allPathFile, inputStream);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            depoly(ossClient);
        }
    }

    /**
     * OSS上传文件-File
     *
     * @param allPathFile OSS上传的全路径路径+文件名称(/111/1.png)
     * @param file        文件
     */
    public static void uploadFile(String allPathFile, File file) {
        try {
            uploadFile(allPathFile, new FileInputStream(file));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * OSS生成文件需要访问的url
     *
     * @param allPathFile OSS需要生成的文件:路径+文件名称(/111/1.png)
     * @reutrn visitUrl 可以访问的url链接
     */

    public static String getVisitUrl(String allPathFile) {
        OSS ossClient = getOSSClient();
        try {
            Calendar calendar = Calendar.getInstance();
            calendar.add(Calendar.DAY_OF_YEAR, URL_EXPIRATION);
            URL url = ossClient.generatePresignedUrl(BUCKET_NAME, allPathFile, calendar.getTime());

            if (url != null) {
                return url.toString();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            depoly(ossClient);
        }
        return null;
    }

    /**
     * 关闭ossClient
     *
     * @param ossClient ossClient
     */
    private static void depoly(OSS ossClient) {
        try {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}



3.2 单例模式

3.2.1 静态内部类-延时加载

  1. 替换 多例 getOSSClient 方法;
  2. 加上 SingletonOSS 内部类静态方法

    /**
     * 内部类静态方法
     */
    private static class SingletonOSS {
        private final static OSS ossClient = new OSSClientBuilder().build(END_POINT, KEY_ID, KEY_SECRET);

    }
    /**
     * 获取 ossClient
     *
     * @reutrn OSS OSS访问Client
     */
    public static OSS getOSSClient() {
        return SingletonOSS.ossClient;
    }

3.2.2 枚举-延时加载

  1. 替换 多例 getOSSClient 方法;
  2. 加上 SingletonOSS 内部类静态方法

    /**
     * 使用枚举方法实现单例模式
     */
    public enum OSSEnumSignletion { //内部枚举类
        INSTANCE;

        private OSS ossClient;

        /**
         * JVM保证这个方法绝对只调用一次
         */
        OSSEnumSignletion() {
            ossClient = new OSSClientBuilder().build(END_POINT, KEY_ID, KEY_SECRET);
        }

        public OSS ossClient() {
            return ossClient;
        }
    }
    /**
     * 获取 ossClient
     *
     * @reutrn OSS OSS访问Client
     */
    public static OSS getOSSClient() {
        return OSSEnumSignletion.INSTANCE.ossClient();
    }

4、单元测试调用

  • 多线程模型并发上传文件
@SpringBootTest
class AliyunossApplicationTests {

    @Test
    void contextLoads() throws InterruptedException { 

        long start = System.currentTimeMillis();
        int threadNum = 10;
        final CountDownLatch countDownLatch = new CountDownLatch(threadNum);

        while (threadNum > 0) {
            new Thread(() -> {
                System.out.println("---------------线程:" + Thread.currentThread());
                for (int j = 0; j < 10; j++) {
                	//上传文件
                    AliyunOSSUtil.uploadFile("111/1.png", new File("C:\\Users\\mtl\\Desktop\\1.png"));
                    //获取访问 url
                    String visitUrl = AliyunOSSUtil.getVisitUrl("111/1.png");
                    System.out.println(visitUrl);
                }
                countDownLatch.countDown();
            }).start();

            threadNum--;
        }
        //main方法阻塞,直到计数器变为0才会继续执行
        countDownLatch.await();
        long end = System.currentTimeMillis();

        System.out.println("总耗时:" + (end - start) + "ms");
    } 
}

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-08-03 11:30:55  更:2021-08-03 11:31:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 20:27:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码