如何用 Minio SDK 访问滴滴云对象存储
一、 前言
滴滴云对象存储 S3 定位分布式海量数据存取服务。S3 提供标准的对象存储服务,您可以通过网络随时随地方便地存储和获取图片/音频/视频/文本/大文件等各类数据文件。
Minio 是一个开源的对象存储项目,它兼容亚马逊 S3 云存储服务接口,GitHub 地址是:https://github.com/minio。
Minio SDK 是一个非常轻量 SDK,本文将以 Python ( minio-py )、Java ( minio-java ) 和 Golang ( minio-go ) 三种语言,在外网 Centos6.4 版本环境上介绍如何用 Minio SDK 来访问滴滴云对象存储 S3。
二、 密匙获取
在用 Minio SDK 前,我们先要获取自己对象存储 S3 的密匙 AK 和 SK,注册后先登陆滴滴云官网:https://www.didiyun.com ,进入“控制台”然后按下图示例申请 AK 和 SK(即图中的 SecretID 和 SecretKey):
三、 域名选择
可以根据不同环境使用不同的域名。目前可使用域名如下:
外网域名:s3.didiyunapi.com
DC2 域名: s3-internal.didiyunapi.com
内网域名:s3-gz.didiyunapi.com
后面将以外网域名为例来讲解。
四、 Minio SDK 访问滴滴云对象存储 S3 示例
1. minio-py 访问
minio-py 支持 Python2.7 及以上的版本,我们以 Centos7.4 自带的 2.7.5 版本为例。
1)用 PIP 安装 minio-py
pip install minio
2)例子代码
vi example.py
#!/usr/bin/python
# Import Minio library.from minio import Minio
from minio.error import (ResponseError, NoSuchBucket, TooManyBuckets, BucketAlreadyOwnedByYou,BucketAlreadyExists)
import timeminioClient = Minio('s3.didiyunapi.com',access_key='AKDD002E38WCJIT6HXTHDTDZCMBCX',secret_key='ASDD2QQb41K9MpxrXs5kcxmaRQ7MQyPCMh8qKMP9',secure=True)try:# bucket exists?if minioClient.bucket_exists("mybucket9") == False:# Creates a new bucket.minioClient.make_bucket("mybucket9", location="gz")else:print("Bucket exist!")# Put a fileprint(minioClient.fput_object('mybucket9', 'myobject', '/tmp/object'))# List all object paths in bucket `objects = minioClient.list_objects('mybucket9', prefix='',recursive=True)for obj in objects:print(obj.bucket_name + " | "+ str(obj.object_name.encode('utf-8')) + " | " + str(obj.is_dir) + " | " + str(obj.last_modified) + " | "+ obj.etag + " | " + str(obj.size) + " | " + str(obj.content_type))except BucketAlreadyOwnedByYou as err:print("BucketAlreadyOwnedByYou: " + str(err))
except BucketAlreadyExists as err:print("BucketAlreadyExists: " + str(err))
except TooManyBuckets as err:print("TooManyBuckets: " + str(err))
except ResponseError as err:print("ResponseError: " + str(err))raise
except Exception as e:print("Unkonw exception: " + str(e))
3)执行
chmod a+x example.py./example.py
2. minio-java 访问
1)下载 minio-java 的 JAR 包
先安装 JDK 后,再下载 minio-java:
wget http://repo1.maven.org/maven2/io/minio/minio/5.0.3/minio-5.0.3-all.jar
2)例子代码
在文件“minio-5.0.3-all.jar”同目录下:
vi Example.java
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.security.InvalidKeyException;
import java.io.InputStream;
import java.io.ByteArrayInputStream;import org.xmlpull.v1.XmlPullParserException;import io.minio.MinioClient;
import io.minio.errors.MinioException;public class Example {public static void main(String[] args) throws NoSuchAlgorithmException, IOException, InvalidKeyException, XmlPullParserException {String endpoint = "s3.didiyunapi.com";String accessKeyID = "AKDD002E38WCJIT6HXTHDTDZCMBCX";String secretAccessKey = "ASDD2QQb41K9MpxrXs5kcxmaRQ7MQyPCMh8qKMP9";try {// Create a minioClient with the Endpoint, Access key and Secret key.MinioClient minioClient = new MinioClient(endpoint, accessKeyID, secretAccessKey);String myBucket = "mybucket9";// Check whether bucket exists or not.boolean found = minioClient.bucketExists(myBucket);if (found) {System.out.println("Bucket exists");// Get input stream to have content of 'my-objectname' from 'my-bucketname'InputStream stream = minioClient.getObject(myBucket, "myobject");// Read the input stream and print to the console till EOF.byte[] buf = new byte[16384];int bytesRead;while ((bytesRead = stream.read(buf, 0, buf.length)) >= 0) {System.out.println(new String(buf, 0, bytesRead));}minioClient.removeObject(myBucket, "myobject");minioClient.removeBucket(myBucket);} else {System.out.println("Bucket does not exist");}String newBucket = "mybucket10";found = minioClient.bucketExists(newBucket);if (found) {System.out.println("Bucket: " + newBucket + " exists");} else {System.out.println("Bucket: " + newBucket + " not exists");minioClient.makeBucket(newBucket);System.out.println("Bucket:" + newBucket + " is created successfully");StringBuilder builder = new StringBuilder();for (int i = 0; i < 3; i++) {builder.append("Sphinx of black quartz, judge my vow: Used by Adobe InDesign to display font samples. ");builder.append("(29 letters)\n");builder.append("brave ghost pled; Watch Jeopardy!, Alex Trebeks fun TV quiz game.\n");builder.append("- --\n");}ByteArrayInputStream bais = newByteArrayInputStream(builder.toString().getBytes("UTF-8"));// Create an objectminioClient.putObject(newBucket, "myobjcet1", bais, bais.available(), "application/octet-stream");bais.close();System.out.println("Object is uploaded successfully");}} catch(MinioException e) {System.out.println("Error occurred: " + e);}}
}
3)编译和运行
编译:
javac -cp "minio-5.0.3-all.jar" Example.java
运行:
java -cp "minio-5.0.3-all.jar:." Example
3. minio-go 访问
1)安装
Golang 环境搭好和 GOPATH 环境变量配置好后:
go get -u github.com/minio/minio-gocd $GOPATH/srcmkdir -p golang.org/xcd $GOPATH/src/golang.org/xgit clone https://github.com/golang/crypto.gitgit clone https://github.com/golang/net.gitgit clone https://github.com/golang/sys.gitgit clone https://github.com/golang/text.git
2)例子代码
vi example.go
package mainimport ("github.com/minio/minio-go""log"
)func main() {endpoint := "s3.didiyunapi.com"accessKeyID := "AKDD002E38WCJIT6HXTHDTDZCMBCX"secretAccessKey := "ASDD2QQb41K9MpxrXs5kcxmaRQ7MQyPCMh8qKMP9"useSSL := true// Initialize minio client object.minioClient, err := minio.New(endpoint, accessKeyID, secretAccessKey, useSSL)if err != nil {log.Fatalln(err)return}myBucket := "mybucket10"myObject := "myobjcet1"found, err := minioClient.BucketExists(myBucket)if err != nil {log.Fatalln(err)return}if found {log.Println("Bucket ", myBucket, "found")// statobjInfo, err := minioClient.StatObject(myBucket, myObject, minio.StatObjectOptions{})if err != nil {log.Fatalln(err)return}log.Println(objInfo)// get objecterr = minioClient.FGetObject(myBucket, myObject, "/tmp/myobject1", minio.GetObjectOptions{})if err != nil {log.Fatalln(err)return}err = minioClient.RemoveObject(myBucket, myObject)if err != nil {log.Fatalln(err)return}err = minioClient.RemoveBucket(myBucket)if err != nil {log.Fatalln(err)return}} else {log.Println("Bucket not found")}
}
3)编译和运行
编译:
go build example.go
运行:
./example
如何用 Minio SDK 访问滴滴云对象存储相关推荐
- oss客户端工具_干货 | 基于Go SDK操作京东云对象存储OSS的入门指南
前言 本文介绍如何使用Go语言对京东云对象存储OSS进行基本的操作,帮助客户快速通过Go SDK接入京东云对象存储,提高应用开发的效率. 在实际操作之前,我们先看一下京东云OSS的API接口支持范围和 ...
- php京东云oss,干货 | 基于Go SDK操作京东云对象存储OSS的入门指南
前言 本文介绍如何使用Go语言对京东云对象存储OSS进行基本的操作,帮助客户快速通过Go SDK接入京东云对象存储,提高应用开发的效率. 在实际操作之前,我们先看一下京东云OSS的API接口支持范围和 ...
- 使用 Minio Client 访问滴滴云 S3 对象存储
如何申请滴滴云 S3 的 Bucket? 先注册 滴滴云账号,进入:https://app.didiyun.com/#/s3/add 申请 Bucket,如下图: 填写名称和设置访问权限,点立即创建即 ...
- ASP.NET Core使用Nacos SDK访问阿里云ACM
背景 前段时间,cranelee 在Github上给老黄提了个issues, 问到了如何用Nacos的SDK访问阿里云ACM. https://github.com/catcherwong/nacos ...
- 腾讯云对象存储 python_GitHub - fushall1104/cos-python3-sdk: 腾讯云对象存储服务(cos)Python3.5版本SDK...
cos-python3-sdk 腾讯云对象存储服务(cos)Python3.5版本SDK *此版本非官方版本 项目进展:开发完成(分片上传待测试) 项目的来由:做基于Django个人网站时,采用了腾讯 ...
- 腾讯云对象存储 COS 服务之 XML Python SDK 实践
文章目录 前言 1 SDK 安装 2 测试代码准备 - 文件上传和下载 2.1 初始化 2.2 文件上传 2.3 文件下载 3 测试验证 END 前言 腾讯云对象存储(Cloud Object Sto ...
- 使用阿里云对象存储oos遇到跨域访问的问题
使用阿里云对象存储oos遇到跨域访问的问题,因为第一次使用云存储,初级码渣查了好久文档,终于找到了解决方法. 大概就说了这么多,我的操作是来到oos概览一栏 ,找到跨域访问 做了一个最简单的配置,这样 ...
- 腾讯云对象存储的完整教程,java将文件上传到腾讯云上后返回可以访问的连接
先前使用的是七牛云,是挺好用的,但是七牛对于测试域名有一个月的时间限制.测试域名失效后上传的图片等文件就不能访问了.但是腾讯云每个注册的账户有50G的对象存储的空间.而且没有时间限制.所以就采用腾讯的 ...
- AWS SDK 访问阿里云 OSS
S3 已经成为云对象存储领域的规范,主流的对象存储都有对它的支持.阿里云 OSS 也支持 S3 协议,我们可以使用AWS的SDK对其进行操作,当然由于OSS与S3在功能和实现上的差别,OSS 不可能支 ...
最新文章
- LeetCode简单题之差的绝对值为 K 的数对数目
- 【转】《iOS7 by Tutorials》系列:iOS7的设计精髓(上)
- 1096 Consecutive Factors
- ABAP 读EXCEL 到内表
- SQL中where 1 = 1的用处
- 股价狂涨 500 亿,小米手机业务与造车可否兼得?
- 基于tensorflow的RBF神经网络案例
- linux系统共享文件夹,Linux系统如何设置共享文件夹?新建文件夹以及指令是什么?...
- [lammps安装教程]lammps并行版安装教程
- WPS中word转pdf文件时给pdf文件增加目录
- ios python 越狱_如何使用Frida绕过iOS应用程序中的越狱检测!!!
- nginxWebUI :nginx可视化配置工具---实践
- 计算机的录像功能在哪里找,电脑录像功能在哪
- Pytorch实现基于深度学习的面部表情识别(最新,非常详细)
- Unity Monetization 3.0 部分接入文档内容
- vue 动态绑定 class
- 复杂网络实验9:vicsek模型(matlab)
- 遥信量采集、显示及信息处理功能 遥测及数据处理功能
- 信息系统建设服务和能力评估和计算机信息系统集成CS资质的区别
- 网站关键词优化技术:如何限制关键词挖掘的范围
热门文章
- c语言实现单链表逆序算法,C语言解字符串逆序和单向链表逆序问题的代码示例...
- 做裂变新增全靠运气吗?绝对不是哦!
- 程序员的自我涵养,写好代码的实战经历分享
- 2014年如何找到SEO流量的突破口
- 咸鱼硬件—Micropython快速指南
- lol哪个服务器能玩无限火力,lol无线火力玩什么快乐?无限火力最快乐的英雄排行...
- 搭建个人图床【阿里云OSS+PicGo】
- 微软azure服务器配置,配置持续部署 - Azure App Service | Microsoft Docs
- 520告白网站的搭建
- 【松岩盘前视点】2019-9-11