导入依赖

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++地图测距/显示不同线段的距离/拿到测距结果/测距结束信号

    一.前言说明 地图测距在地图组件中属于一个比较小众的功能,但是又不得不提供,有时候用户希望直接在地图上选点,测算距离,尤其是在一些军事领域用的比较多,测距功能提炼出来的共性就是,每一段都有距离,最后鼠 ...

  2. Qt编写安防视频监控系统38-onvif校时

    一.前言 在视频监控系统中,对摄像机进行时间设置也是很有必要的,这样就和服务器或者软件这边统一了时间,一般在摄像机的画面上可以设置OSD标识当前时间,这样存储到视频文件中回放的时候,也能和本地的时间一 ...

  3. dotnet最小webApi开发实践

    dotnet最小webApi开发实践 软件开发过程中,经常需要写一些功能验证代码.通常是创建一个console程序来验证测试,但黑呼呼的方脑袋界面,实在是不讨人喜欢. Web开发目前已是网络世界中的主 ...

  4. 状压 DP 做题记录

    1.普通状态压缩 DP oi-wiki I.P1896 [SCOI2005] 互不侵犯 \(f_{i,j,st}\) 表示前 \(i\) 行中放置了 \(j\) 个国王,当前行状态为 \(st\) 的 ...

  5. Map中经常被忽略但又非常好用的方法

    1. 简介 map是我们日常开发中常会的集合类之一, 但是我们除了常用的get和put之外,其他的方法好像很少会用到,接下来我们就介绍一下几个经常被忽略但又很好用的方法. 2. Quick Start ...

  6. Mac 最大连接数和端口的相关参数

    1. 最大连接数限制 最大连接数限制就是系统所能打开的最大文件数(文件描述符)的限制,分全局和进程两种: 1.1. 全局 $ sysctl kern.maxfiles kern.maxfiles: 4 ...

  7. SpringBoot(四) - 整合Mybatis,逆向工程,JPA,Mybatis-plus

    1.SpringBoot整合MyBatis 1.1 application.yml # 数据源配置 spring: datasource: driver-class-name: com.mysql.c ...

  8. R语言学习数据挖掘

    1.用R计算数据基本统计量(均值) 学习机器学习和数据挖掘中的各种算法和模型,需要掌握统计学的基本概念.统计学是通过搜索.整理.分析数据等手段,以达到推断所测对象的本质,并预测对象未来走势的一门综合性 ...

  9. delphi编写sql脚本文件批量执行程序

    程序使用DelphiXE11.1开发,用到控件UniDac9.1.1,QDAC里面的Qlog组件. 程序实现了SQL脚本文件批处理执行应用,运行效果图. 文件.pas代码 unit main; int ...

  10. 第8章 LINQ 查询

    第8章 LINQ 查询 8.2 流式语法 8.2.2 使用 Lambda 表达式 常用运算符 Where() 筛选器 Order() 排序器 Select() 映射器 Take() 获取前 x 个元素 ...