导入依赖

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音视频开发32-qmedia内核回调拿图片数据

    一.前言 使用qmediaplayer来打开视频并播放,默认首选会采用QVideoWidget控件来展示,优点是不用自己来绘制,一切交给了QVideoWidget控件,这样可以做到极低的CPU占用,缺 ...

  2. Python项目开发案例集锦pdf

    下载链接:https://www.jb51.net/books/780548.html

  3. 老生常谈——分布式限流:部分Sentinal源码解读

    基础知识 HTTP CODE = 429 "请求过多" A. 限流的类型 服务端 客户端 限流的标的 IP 用户 ... 基本要求 准确限制过量的请求. 低延时.限流器不能拖慢HT ...

  4. 第五章 非对称加密算法--DH--RSA

    13.1.DH 非对称算法的基石 仅能用于密钥分配,不能用于加解密数据,一般加密数据用AES 密钥长度:512~1024中的64的整数倍 双方各有自己的密钥对 13.2.RSA 最经典的非对称加密算法 ...

  5. manim边学边做--局部变换

    本次介绍的两个用于变换的动画类:TransformMatchingShapes和TransformMatchingTex. 它们的主要特点是对一组对象或一段文本进行局部变换,适用于复杂的图形或者文本的 ...

  6. 【忍者算法】从股市走势到动态规划:探索最大子数组和问题|LeetCode 53 最大子数组和

    从股市走势到动态规划:探索最大子数组和问题 生活中的算法 想象你是一位股票交易员,手上有一支股票的每日涨跌数据.你想找出哪段连续的交易日能获得最大的收益.如果某天股票上涨5元,我们记为+5,下跌3元记 ...

  7. [文件格式/数据存储] Parquet:开源、高效的列式存储文件格式协议

    序:缘起 => 用 java 读取 parquet 文件 生产环境有设备出重大事故,又因一关键功能无法使用,亟需将生产环境的原始MQTT报文(以 parquet 文件格式 + zstd 压缩格式 ...

  8. 云主机 vs 轻量型云主机:性能与灵活性的平衡

    本文分享自天翼云开发者社区<云主机 vs 轻量型云主机:性能与灵活性的平衡>,作者:冯****芙 什么是轻量型云主机.什么是云主机? 云主机是云计算的一种基础设施服务模型,它是在云平台上通 ...

  9. CRISP-DM的应用与理解

    本文分享自天翼云开发者社区<CRISP-DM的应用与理解>,作者:吴****嫄 CRISP-DM是一个数据挖掘项目规划的开放标准流程框架模型,主要分为业务理解.数据理解.数据准备.建模.评 ...

  10. 2024 MWC上海,“翼”彩纷呈!

    2024年6月26日,2024世界移动通信大会上海(简称"MWC上海")盛大开幕.围绕"未来先行"主题,来自全球的产业.技术和社区等各界代表齐聚一堂,共话产业高 ...