阿里对象储存OSS的SDK使用

对象存储OSS

该功能的实现使用了阿里的:对象存储OSS技术。

在阿里对象存储空间的文件可以 以链接 的形式进行访问:
文件访问路径规则https://BucketName.Endpoint/ObjectName
在这里插入图片描述

该技术的使用方式有很多,针对于SDK的简单实现官网上也有教程,但是你会发现,实际的代码与官网给的示例代码有些出处,一般包含以下几个功能:

  • 创建存储空间:Bucket
  • 上传文件
  • 下载文件
  • 列举文件
  • 删除文件

有四个重要的名词:endpointbucketNameaccessKeyIdaccessKeySecret

  • endpoint:访问域名
  • bucketName:储存空间名
  • accessKeyId:密钥
  • accessKeySecret:密钥密码,阿里已经关闭了后于查询密钥密码的功能,所以在创建密钥时生成的密码要保存,丢了就没了。

接下来介绍上述功能的实际应用:
去官网上看以下这些示例代码,你会发现有很多地方使一样的,只有在 实现某一工功能 的地方不一样。

创建储存空间 :官网上将这一步骤给单独提了出来,目的是为了 使用代码 来创建Bucket,其实这一步我们完全可以手动来创建。进出官网,开通 对象储存OSS 功能,创建储存空间并起 名称(bucketName)。

完成之后后续四个功能的代码中 创建OSSClient示例就可以改为:

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);//指定了域名,密钥,密钥密码。

上传文件
这是最常用的功能,主要实现是 使用OSS对象调用putObject()方法

putObject(BucketName,ObjectName,ByteArrayInputStream),
new ByteArrayInputStream(byte[] byte),byte是对象数据的字节数组。

代码示例:

package com.sky.utils;import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;import java.io.ByteArrayInputStream;@Data
@AllArgsConstructor
@Slf4j
public class AliOssUtil {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;/*** 文件上传** @param bytes* @param objectName* @return*/public String upload(byte[] bytes, String objectName) {// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);try {// 创建PutObject请求。ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(bytes));} 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();}}//文件访问路径规则 https://BucketName.Endpoint/ObjectNameStringBuilder stringBuilder = new StringBuilder("https://");stringBuilder.append(bucketName).append(".").append(endpoint).append("/").append(objectName);log.info("文件上传到:{}", stringBuilder.toString());return stringBuilder.toString();}
}

下载文件
主要是使用 OSS 调用 getObject(bucketName, objectName);返回OSSClient实例
再用 OSSClient 实例调用getObjectContent();获取文件输入流

try代码块中的内容示例

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);try {
// 调用ossClient.getObject返回一个OSSObject实例,该实例包含文件内容及文件元数据。
OSSObject ossObject = ossClient.getObject(bucketName, objectName);
// 调用ossObject.getObjectContent获取文件输入流,可读取此输入流获取其内容。
InputStream content = ossObject.getObjectContent();
if (content != null) {BufferedReader reader = new BufferedReader(new InputStreamReader(content));while (true) {String line = reader.readLine();if (line == null) {break;}System.out.println("\n" + line);}
// 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
content.close();
}

其他地方不需改动

列举文件:
使用 OSS 调用listObjects(bucketName);

try代码块中的内容示例:

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);try {// ossClient.listObjects返回ObjectListing实例,包含此次listObject请求的返回结果。ObjectListing objectListing = ossClient.listObjects(bucketName);// objectListing.getObjectSummaries获取所有文件的描述信息。for (OSSObjectSummary objectSummary : objectListing.getObjectSummaries()) {System.out.println(" - " + objectSummary.getKey() + "  " +"(size = " + objectSummary.getSize() + ")");
}

其他代码不需改动

删除文件:
使用 OSS 调用 deleteObject(bucketName, objectName);

try代码块中的内容示例:

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);try {// 删除文件。ossClient.deleteObject(bucketName, objectName);
}

其他代码不需改动

以链接访问对象储存中的对象:
文件访问路径规则https://BucketName.Endpoint/ObjectName
上传文件 的示例代码中已有了该内用的示例代码,我们一般是将可给用户展示的文件的访问路径以字符串的形式发送给前端页面,让前端去访问该路径。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/815419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go 利用channel控制并发

任务数量为50,并发在5,全部都要执行 package mainimport ("fmt""time" )type Con struct {num inttime string }func main() {//channel实现并发控制// 定义同时执行的任务数量concurrencyLevel : 5//总任务数totalTask : 50// 创…

【网络编程】高性能并发服务器源码剖析

hello !大家好呀! 欢迎大家来到我的网络编程系列之洪水网络攻击,在这篇文章中,你将会学习到在网络编程中如何搭建一个高性能的并发服务器,并且我会给出源码进行剖析,以及手绘UML图来帮助大家来理解&#xf…

教你将配置好的conda环境迁移到其它设备

文章目录 问题分析存在的方法环境要求方法步骤1. 下载conda pack2. 打包原环境3. 新设备还原环境4. 查看环境 问题分析 好不容易配置好的conda环境,要在另一个设备上运行,还要重新配置,好麻烦。 存在的方法 pip install -r requirement.txt …

Node.js留言板(超详细注释)

目录结构如下 app.js // 一.引入模块 var http require(http);// 用于创建 HTTP 服务器和处理 HTTP 请求 var fs require(fs);// 用于读取和写入文件 var url require(url);// 用于解析URL// 创建留言数据对象 var msgs [{ name: 牛二, content: "我是妞儿", cr…

Flink学习(五)-流式分析

一、时间分类 事件时间(event time): 事件产生的时间,记录的是设备生产(或者存储)事件的时间 摄取时间(ingestion time): Flink 读取事件时记录的时间 处理时间(processing time): Flink pipeline 中具体算子处理事件的时间 二、…

场景:数据库死锁

来自hollis八股文 流程图 前置知识 数据库上锁锁住的不是行,而是索引的主键 比如我对id 1的主键进行上锁,实际上是对查询使用的主键的key 1 进行上锁 对非聚簇索引操作时,首先会对非聚簇索引上锁,然后在请求主键的锁 比如我…

为什么开关电源变压器的耦合不可能为100%?什么是漏感?

一、为什么开关电源变压器的耦合不可能为100%? 变压器耦合度是指变压器初级绕组和次级绕组之间能量传递的效率,它反映了变压器在电磁感应过程中,初级侧磁通量能够有多少比例被次级侧有效利用。理论上,理想的变压器耦合度应该是10…

08 Php学习:if语句、Switch语句

PHP 条件语句 当您编写代码时,您常常需要为不同的判断执行不同的动作。您可以在代码中使用条件语句来完成此任务。 在 PHP 中,提供了下列条件语句: if 语句 - 在条件成立时执行代码 if…else 语句 - 在条件成立时执行一块代码,…

Java实现短信发送并校验,华为云短信配合Redis实现发送与校验

Java实现短信发送并校验&#xff0c;华为云短信配合Redis实现发送与校验 安装sms4j和redis <dependency><groupId>org.dromara.sms4j</groupId><artifactId>sms4j-spring-boot-starter</artifactId><version>3.2.1</version> <…

WPS基础使用

个人笔记&#xff08;整理不易&#xff0c;有帮助&#xff0c;收藏点赞评论&#xff0c;爱你们&#xff01;&#xff01;&#xff01;你的支持是我写作的动力&#xff09; 笔记目录&#xff1a;学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客 个人随笔…

单路高清HDMI编码器JR-3211HD

产品简介&#xff1a; JR-3211HD单路高清HDMI编码器是专业的高清音视频编码产品&#xff0c;该产品具有支持1路高清HDMI音视频采集功能&#xff0c; 1路3.5MM独立外接音频输入&#xff0c;编码输出双码流H.264格式&#xff0c;音频MP3/AAC格式。编码码率可调&#xff0c;画面质…

SHARE 203S PRO:倾斜摄影相机在地灾救援中的应用

在地质灾害的紧急关头&#xff0c;救援队伍面临的首要任务是迅速而准确地掌握灾区的地理信息。这时&#xff0c;倾斜摄影相机成为了救援测绘的利器。SHARE 203S PRO&#xff0c;这款由深圳赛尔智控科技有限公司研发的五镜头倾斜摄影相机&#xff0c;以其卓越的性能和功能&#…

每日一题:C语言经典例题之最受欢迎歌手

题目描述 学校推出了10名歌手&#xff0c;每个歌手都有唯一编号。校学生会想知道这些歌手受欢迎的程度&#xff0c;设了一个投票箱&#xff0c;让每一个同学给自己喜欢的歌手投票&#xff0c;同学们使用歌手编号进行投票。现在学生会找你帮忙统计一下每位歌手获得的票数&#x…

QtCreater 使用

QtCreater 创建项目 1.刚进入 QtCreater 的界面是这样的一个界面 ① 创建一个新的文件&#xff0c;那么我们就选择左上角的 “文件” ② 点击新建文件&#xff0c;或者也可以直接使用快捷键 CtrlN 此时就会弹出对话框&#xff0c;让我们选择想要创建的文件&#xff1a; Appli…

python爬虫-----爬虫解析—xpath(第十八天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

一体化泵站的生产制造流程怎样

诸城市鑫淼环保小编带大家了解一下一体化泵站的生产制造流程怎样 综合泵站和传统式混泥土泵站的一大差别是&#xff0c;离去制造厂前&#xff0c;能够开展全部机械设备设备的生产加工及零部件加工&#xff0c;随后运送到建筑项目当场开展安裝。这类经营方式缩短了开发周期&…

Nginx日志格式化和追踪

背景 Nginx是一款功能强大的Web服务器&#xff0c;对于网络环境中的日志记录和配置至关重要。定制化Nginx日志格式可以帮助管理员更好地监控服务器性能、分析用户行为并做出相应优化。在本文中&#xff0c;我们将深入探讨Nginx日志格式的高级定制化策略&#xff0c;包括理解基…

每日练习——leetcode77和347

目录 347. 前 K 个高频元素 题目描述 解题思路 代码实现 77. 组合 题目描述 解题思路 代码实现 347. 前 K 个高频元素 题目描述 给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 1: 输入: nu…

API接口京东开放平台item_get-获得京东商品详情API接口根据商品ID查询商品标题价格描述等详情数据

京东商品详情API接口可以提供以下方面的信息&#xff1a; 商品基础信息&#xff1a;包括商品的标题、价格、描述、图片等基本信息&#xff0c;这是构建电商平台的基础数据。商品分类信息&#xff1a;帮助用户更好地了解商品所属的类别&#xff0c;便于商品筛选和查找。商品销售…

sheng的学习笔记-AI-决策树(Decision Tree)

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 目录 什么是决策树 划分选择 信息增益 增益率 基尼指数 剪枝处理 预剪枝 后剪枝 连续值处理 另一个例子 基本步骤 排序 计算候选划分点集合 评估分割点 每个分割点都进行评估&#xff0c;找到最大信息增益的…