导入依赖

go get gopkg.in/amz.v1/aws
go get gopkg.in/amz.v1/s3

创建用户

在初始化连接之前,我们需要创建一个用户得到accessKey和secretKey,新增用户的指令如下:

docker exec ceph-rgw radosgw-admin user create --uid="test" --display-name="test user"

封装使用

package main

import (
"gopkg.in/amz.v1/aws"
"gopkg.in/amz.v1/s3"
"io/ioutil"
"log"
) var cephConn *s3.S3 // GetCephConnection : 获取ceph连接
func GetCephConnection() *s3.S3 {
if cephConn != nil {
return cephConn
}
// 1. 初始化ceph的一些信息
auth := aws.Auth{
AccessKey: "xxxxx",
SecretKey: "xxxxx",
} curRegion := aws.Region{
Name: "default",
EC2Endpoint: "http://127.0.0.1:7480",
S3Endpoint: "http://127.0.0.1:7480",
S3BucketEndpoint: "",
S3LocationConstraint: false,
S3LowercaseBucket: false,
Sign: aws.SignV2,
} // 2. 创建S3类型的连接
return s3.New(auth, curRegion)
} // GetCephBucket : 获取指定的bucket对象
func GetCephBucket(bucket string) *s3.Bucket {
conn := GetCephConnection()
return conn.Bucket(bucket)
} // 将本地文件上传到ceph的一个bucket中
func put2Bucket(bucket *s3.Bucket, localPath, cephPath string) (*s3.Bucket, error) {
err := bucket.PutBucket(s3.PublicRead)
if err != nil {
log.Fatal(err.Error())
return nil, err
} bytes, err := ioutil.ReadFile(localPath)
if err != nil {
log.Fatal(err.Error())
return nil, err
} err = bucket.Put(cephPath, bytes, "octet-stream", s3.PublicRead)
return bucket, err
} // 从ceph下载文件
func downloadFromCeph(bucket *s3.Bucket, localPath, cephPath string) error {
data, err := bucket.Get(cephPath)
if err != nil {
log.Fatal(err.Error())
return err
}
return ioutil.WriteFile(localPath, data, 0666)
} // 删除指定的文件
func delCephData(bucket *s3.Bucket, cephPath string) error {
err := bucket.Del(cephPath)
if err != nil {
log.Fatal(err.Error())
}
return err
} // 删除桶,删除桶时要保证桶内文件已经被删除
func delBucket(bucket *s3.Bucket) error {
err := bucket.DelBucket()
if err != nil {
log.Fatal(err.Error())
}
return err
} // 批量获取文件信息
func getBatchFromCeph(bucket *s3.Bucket, prefixCephPath string) []string {
maxBatch := 100 // bucket.List() 返回桶内objects的信息,默认1000条
resultListResp, err := bucket.List(prefixCephPath, "", "", maxBatch)
if err != nil {
log.Fatal(err.Error())
return nil
} keyList := make([]string, 0)
for _, key := range resultListResp.Contents {
keyList = append(keyList, key.Key)
} return keyList
}

测试

package main

import (
"fmt"
"time"
) func main() {
bucketName := "bucket_test"
filename := "/niuben/ceph_store/1308540.jpg"
cephPath := "/static/default/bucket_test/V1/" + "1308540.jpg" // 获取指定桶
bucket := GetCephBucket(bucketName) // 上传
bucket, err := put2Bucket(bucket, filename, cephPath)
if err != nil {
return
} // 下载
localPath := "/niuben/ceph_store/1308540_ceph.jpg"
err = downloadFromCeph(bucket, localPath, cephPath)
if err != nil {
return
} // 获得url
url := bucket.SignedURL(cephPath, time.Now().Add(time.Hour))
fmt.Println(url) // 批量查找
prefixCephpath := "static/default/bucket_test/V1"
lists := getBatchFromCeph(bucket, prefixCephpath)
for _, list := range lists {
fmt.Println(list)
} // 删除数据
delCephData(bucket, cephPath) // 删除桶
delBucket(bucket) }

测试时,可以 go run store.go main.go 运行结果

go ceph s3文件管理的更多相关文章

  1. 使用COSBench工具对ceph s3接口进行压力测试--续

    之前写的使用COSBench工具对ceph s3接口进行压力测试是入门,在实际使用是,配置内容各不一样,下面列出 压力脚本是xml格式的,套用UserGuide文档说明,如下 有很多模板的例子,在co ...

  2. ceph S3客户端操作--s3cmd

    S3 client 访问ceph rgw 安装: yum install s3cmd 验证安装是否成功: $s3cmd --version s3cmd version 1.5.2 #表示安装成功 在c ...

  3. Ceph S3 基于NGINX的集群复制方案

    前言 ceph的s3数据的同步可以通过radosgw-agent进行同步,同region可以同步data和metadata,不同region只能同步metadata,这个地方可以参考下秦牧羊梳理的 c ...

  4. CEPH s3 java sdk PUT对象并在同一个PUT请求中同时设置ACL为 Public

    java: http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/dev/acl-using-java-sdk.html tring bucketName ...

  5. ceph S3测试--cosbench

    COSBench安装 Cosbench是Intel的开源云存储性能测试软件,COSBench目前已经广泛使用与云存储测试,并作为云存储的基准测试工具使用 1 环境 1.1 操作系统 COSBench可 ...

  6. 使用COSBench工具对ceph s3接口进行压力测试

    一.COSBench安装 COSBench是Intel团队基于java开发,对云存储的测试工具,全称是Cloud object Storage Bench 吐槽下,貌似这套工具是intel上海团队开发 ...

  7. 4.Ceph 基础篇 - 对象存储使用

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485256&idx=1&sn=39e07215 ...

  8. Kubernetes中分布式存储Rook-Ceph部署快速演练

    最近在项目中有涉及到Kubernetes的分布式存储部分的内容,也抽空多了解了一些.项目主要基于Rook-Ceph运行,考虑到Rook-Ceph部署也不那么简单,官方文档的步骤起点也不算低,因此,在整 ...

  9. 多es 集群数据迁移方案

    前言 加入新公司的第二个星期的星期二 遇到另一个项目需要技术性支持:验证es多集群的数据备份方案,需要我参与验证,在这个项目中需要关注到两个集群的互通性.es集群是部署在不同的k8s环境中,K8s环境 ...

  10. 基于LAMP php7.1搭建owncloud云盘与ceph对象存储S3借口整合案例

    ownCloud简介 是一个来自 KDE 社区开发的免费软件,提供私人的 Web 服务.当前主要功能包括文件管理(内建文件分享).音乐.日历.联系人等等,可在PC和服务器上运行. 简单来说就是一个基于 ...

随机推荐

  1. Qt/C++音视频开发57-切换音视频轨道/切换节目流/分别切换音频视频轨道

    一.前言 对各种音视频文件格式的支持,是一个播放器的基础功能.一般的音视频文件只有1路流,比如音频文件只有1路音频流,视频文件只有1路音频1路视频流,实践过程中发现,还有一种ts格式的文件,可能有多路 ...

  2. Qt编写的项目作品9-音频综合应用示例

    一.功能特点 自动计算音频振幅,绘制音频振幅曲线和音频数据曲线. 支持音频录制,可选音频输入设备.采样频率.通道等参数,Qt5默认保存wav格式,Qt6默认保存mp3格式,Qt6可选wma.aac等格 ...

  3. 【Windows 开发环境配置——C++ 篇】VSCode+MSVC/MinGW/Clangd/LLDB+Xmake

    环境安装 Microsoft Visual Studio 这里以Visual Studio 2022为例,在Visual Studio 2022 版本发行说明 | Microsoft Learn选择所 ...

  4. Github绝版开源加速神器fastgit下载链接

    Github绝版开源加速神器fastgit下载链接: https://pan.baidu.com/s/1R-4rWuxh0_awIRaWCiGWkQ 提取码: yyrg 参考链接:发现一款稳定可靠的 ...

  5. 意外之喜——黑夜 CrossFire!!!

    在日常逛L站时,偶然发现了"友链"功能,机缘巧合下进入了specialhua的博客,又被吸引着点进了其中一篇博客,于是便通过specialhua的博客看到了黑夜的这篇文章,感觉就像 ...

  6. Assignment pg walkthrough Easy 通配符提权变种

    nmap 扫描 ┌──(root㉿kali)-[~] └─# nmap -p- -A 192.168.157.224 Starting Nmap 7.94SVN ( https://nmap.org ...

  7. 2024年春秋杯网络安全联赛冬季赛部分wp

    部分附件下载地址: https://pan.baidu.com/s/1Q6FjD5K-XLI-EuRLhxLq1Q 提取码: jay1 Misc day1-简单算术 根据提示应该是异或 下载文件是一个 ...

  8. WEB系统安全之开源软件风险使用评估

    本文分享自天翼云开发者社区<WEB系统安全之开源软件风险使用评估>,作者:Coding 中国信息通信研究院(China Academy of Information and Communi ...

  9. HPC云化部署的优势和挑战

    本文分享自天翼云开发者社区<HPC云化部署的优势和挑战> 作者:土豆炒肉丝 HPC云化部署指的是将高性能计算(HPC)工作负载部署在云计算平台上,这种方式带来了一些明显的优势,但同时也面临 ...

  10. CDN与前端技术

    本文分享自天翼云开发者社区<CDN与前端技术>,作者:张****亮 CDN(Content Delivery Network)是一种广泛应用于网络加速和内容分发的技术.它通过在全球各地部署 ...