集成阿里云OSS编写AliyunOSSUtil

文章目录

  • 集成阿里云OSS编写AliyunOSSUtil
    • 1、引入sdk依赖
    • 2、添加yml配置文件
    • 3、编写 AliyunOSSUtil文件
      • 3.1 多例模式
      • 3.2 单例模式
        • 3.2.1 静态内部类-延时加载
        • 3.2.2 枚举-延时加载
    • 4、单元测试调用

我们通过调用官方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: 你的bucketendPoint: https://oss-cn-shenzhen.aliyuncs.comaccessKeyId: 你的 accessKeyIdaccessKeySecret: 你的 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;@PostConstructpublic 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 {@Testvoid 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"));//获取访问 urlString 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");}
}

集成阿里云OSS编写AliyunOSSUtil相关推荐

  1. Springboot集成 阿里云OSS上传及下载

    文章目录 使用手册 maven依赖及环境配置 定义配置bean及OSS工具类 定义UploadController和DownloadController 下载接口优化为返回重定向oss路径 遇到的问题 ...

  2. SpringBoot集成阿里云OSS上传文件

    文章目录 前言 一.准备环境 1.在搜索框搜索 对象存储OSS 2.创建Bucket 3.找到开发相关信息 二.具体代码 1.Maven依赖 2.application.yml配置 3.AliOssP ...

  3. SringBoot集成阿里云OSS上传文件

    上一篇文章讲了如何将文件从linux同步到阿里云的oss有兴趣的小伙伴可以去看看,这篇文章讲述如何将文件上传到阿里云oss上,本文只详细写出后端java代码示例,前端和无用代码都会省略,可以上传文件, ...

  4. Android 快速集成阿里云OSS服务2020

    一.兼单快速集成 1.打开阿里云官网 https://www.aliyun.com并注册账号,然后登陆 2.在阿里云主页选择产品分类,再选择对象存储OSS 3.点击帮助文档开始进行集成 (1).点击帮 ...

  5. 十三.SpringCloudAlibaba极简入门-集成阿里云OSS对象存储

    前言 因为在搞项目,需要对接一下OSS,所以一时兴起就做一下整理,本文章讲述的是如何使用阿里云的对象存储作为文件服务器,您需要登录阿里云,注册一个账号. 1.注册登录阿里云 省略- 2.开通OSS对象 ...

  6. 在线教育_Day06_项目整合阿里云OSS和Excel导入分类

    一.阿里云OSS概述及开通 1.1 对象存储OSS 为了解决海量数据存储与弹性扩容,项目中我们采用云存储的解决方案- 阿里云OSS. 1.2 开通"对象存储OSS"服务 (1)申请 ...

  7. 14 医疗挂号系统_【阿里云OSS、用户认证与就诊人】

    阿里云oss 用户认证需要上传证件图片.首页轮播也需要上传图片,因此我们要做文件服务,阿里云oss是一个很好的分布式文件服务系统,所以我们只需要集成阿里云oss即可 1.开通"对象存储OSS ...

  8. springboot整合阿里云oss上传的方法示例

    这篇文章主要介绍了springboot整合阿里云oss上传的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 OSS申请和 ...

  9. 阿里云OSS的使用(全程请登陆)

    文章目录 1.阿里云oss服务开通 2.进入控制台 3.创建Bucket 4.上传一张图片,测试是否成功 5.创建AccessKey 6.Java集成OSS 6.1.依赖POM 6.2.配置类appl ...

最新文章

  1. 无言的鞭策:日本20年19人获自然科学诺奖
  2. python调用可执行文件
  3. 寻找一个字符串中所有重复字符的索引
  4. linux下用户切换
  5. ubuntu linux kvm安装,基于Ubuntu 14.04 KVM拟化安装部署
  6. java实现字符逆序输出
  7. sys/queue.h
  8. python坐标轴刻度设置对数_用对数刻度设置刻度
  9. ROW_NUMBER (Transact-SQL)
  10. 系统协调服务器,协调网络系统 Collaboration network system
  11. bootstrap设计登录页面_前端小白如何在10分钟内打造一个爆款Web响应式登录界面?...
  12. dingtalk 推送手机号信息 golang_PureQuant使用功能介绍(二):通过配置模块导入API信息...
  13. 东华理工大学arm试卷_《arm体系结构》期末考试试卷 含等答案.doc
  14. Win10升级后出现的OEM分区处理
  15. html 卫星地图显示地名,卫星图看:河南10个名字非常好听的县(区),你认识几个?...
  16. 共焦显微镜技术原理、参数及其应用
  17. lsdyna如何设置set中的node_list_如何理解vue的双向绑定
  18. 尴尬的国产与国外操作系统对比:面对现实这么难吗?
  19. ubuntu14.04安装php5.6
  20. OSChina 周一乱弹 —— 理发师小姐姐的魔法

热门文章

  1. 第三方 - 收藏集 - 掘金
  2. 法瑞意游记+攻略 五(巴黎-苏黎世 TGV 十二月三十日) 未完
  3. 最新!2023年工程测量乙级测绘资质申请标准
  4. SSL证书格式转化的两种方法
  5. 用Easyui写一个银行个人存款计算器(纯前端页面)
  6. 灵光一闪!帮你使用Vue,搞定无法解决的“动态挂载”
  7. ZOJ3775:?(_o)!
  8. 云HIS源码:云HIS系统操作指南
  9. node.js运行js_Node.js运行时v8选项列表
  10. java字符集转换 Big5 和 Unicode互转