一、 前言

滴滴云对象存储 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 访问滴滴云对象存储相关推荐

  1. oss客户端工具_干货 | 基于Go SDK操作京东云对象存储OSS的入门指南

    前言 本文介绍如何使用Go语言对京东云对象存储OSS进行基本的操作,帮助客户快速通过Go SDK接入京东云对象存储,提高应用开发的效率. 在实际操作之前,我们先看一下京东云OSS的API接口支持范围和 ...

  2. php京东云oss,干货 | 基于Go SDK操作京东云对象存储OSS的入门指南

    前言 本文介绍如何使用Go语言对京东云对象存储OSS进行基本的操作,帮助客户快速通过Go SDK接入京东云对象存储,提高应用开发的效率. 在实际操作之前,我们先看一下京东云OSS的API接口支持范围和 ...

  3. 使用 Minio Client 访问滴滴云 S3 对象存储

    如何申请滴滴云 S3 的 Bucket? 先注册 滴滴云账号,进入:https://app.didiyun.com/#/s3/add 申请 Bucket,如下图: 填写名称和设置访问权限,点立即创建即 ...

  4. ASP.NET Core使用Nacos SDK访问阿里云ACM

    背景 前段时间,cranelee 在Github上给老黄提了个issues, 问到了如何用Nacos的SDK访问阿里云ACM. https://github.com/catcherwong/nacos ...

  5. 腾讯云对象存储 python_GitHub - fushall1104/cos-python3-sdk: 腾讯云对象存储服务(cos)Python3.5版本SDK...

    cos-python3-sdk 腾讯云对象存储服务(cos)Python3.5版本SDK *此版本非官方版本 项目进展:开发完成(分片上传待测试) 项目的来由:做基于Django个人网站时,采用了腾讯 ...

  6. 腾讯云对象存储 COS 服务之 XML Python SDK 实践

    文章目录 前言 1 SDK 安装 2 测试代码准备 - 文件上传和下载 2.1 初始化 2.2 文件上传 2.3 文件下载 3 测试验证 END 前言 腾讯云对象存储(Cloud Object Sto ...

  7. 使用阿里云对象存储oos遇到跨域访问的问题

    使用阿里云对象存储oos遇到跨域访问的问题,因为第一次使用云存储,初级码渣查了好久文档,终于找到了解决方法. 大概就说了这么多,我的操作是来到oos概览一栏 ,找到跨域访问 做了一个最简单的配置,这样 ...

  8. 腾讯云对象存储的完整教程,java将文件上传到腾讯云上后返回可以访问的连接

    先前使用的是七牛云,是挺好用的,但是七牛对于测试域名有一个月的时间限制.测试域名失效后上传的图片等文件就不能访问了.但是腾讯云每个注册的账户有50G的对象存储的空间.而且没有时间限制.所以就采用腾讯的 ...

  9. AWS SDK 访问阿里云 OSS

    S3 已经成为云对象存储领域的规范,主流的对象存储都有对它的支持.阿里云 OSS 也支持 S3 协议,我们可以使用AWS的SDK对其进行操作,当然由于OSS与S3在功能和实现上的差别,OSS 不可能支 ...

最新文章

  1. LeetCode简单题之差的绝对值为 K 的数对数目
  2. 【转】《iOS7 by Tutorials》系列:iOS7的设计精髓(上)
  3. 1096 Consecutive Factors
  4. ABAP 读EXCEL 到内表
  5. SQL中where 1 = 1的用处
  6. 股价狂涨 500 亿,小米手机业务与造车可否兼得?
  7. 基于tensorflow的RBF神经网络案例
  8. linux系统共享文件夹,Linux系统如何设置共享文件夹?新建文件夹以及指令是什么?...
  9. [lammps安装教程]lammps并行版安装教程
  10. WPS中word转pdf文件时给pdf文件增加目录
  11. ios python 越狱_如何使用Frida绕过iOS应用程序中的越狱检测!!!
  12. nginxWebUI :nginx可视化配置工具---实践
  13. 计算机的录像功能在哪里找,电脑录像功能在哪
  14. Pytorch实现基于深度学习的面部表情识别(最新,非常详细)
  15. Unity Monetization 3.0 部分接入文档内容
  16. vue 动态绑定 class
  17. 复杂网络实验9:vicsek模型(matlab)
  18. 遥信量采集、显示及信息处理功能 遥测及数据处理功能
  19. 信息系统建设服务和能力评估和计算机信息系统集成CS资质的区别
  20. 网站关键词优化技术:如何限制关键词挖掘的范围

热门文章

  1. c语言实现单链表逆序算法,C语言解字符串逆序和单向链表逆序问题的代码示例...
  2. 做裂变新增全靠运气吗?绝对不是哦!
  3. 程序员的自我涵养,写好代码的实战经历分享
  4. 2014年如何找到SEO流量的突破口
  5. 咸鱼硬件—Micropython快速指南
  6. lol哪个服务器能玩无限火力,lol无线火力玩什么快乐?无限火力最快乐的英雄排行...
  7. 搭建个人图床【阿里云OSS+PicGo】
  8. 微软azure服务器配置,配置持续部署 - Azure App Service | Microsoft Docs
  9. 520告白网站的搭建
  10. 【松岩盘前视点】2019-9-11