# 什么是对象存储

对象存储(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务。多种存储类型供选择,全面优化存储成本。特点概述:

  • 高性能 :MinIO号称是世界上速度最快的对象存储服务器。在标准硬件上,对象存储的读/写速度最高可以达到183 GB/s和171 GB/s。对象存储可以充当主存储层,以处理Spark、Presto、TensorFlow、H2O.ai等各种复杂工作负载以及成为Hadoop HDFS的替代品。MinIO用作云原生应用程序的主要存储,与传统对象存储相比,云原生应用程序需要更高的吞吐量和更低的延迟。而这些都是MinIO能够达成的性能指标。;
  • 丰富的SDK支持 :MinIO几乎提供了所有主流开发语言的SDK以及文档。;
  • AWS S3标准兼容 :亚马逊云的 S3 API(接口协议) 是在全球范围内达到共识的对象存储的协议,是全世界内大家都认可的标准。MinIO 在很早的时候就采用了 S3 兼容协议,并且MinIO 是第一个支持 S3 Select 的产品. MinIO对其兼容性的全面性感到自豪, 并且得到了 750多个组织的认同, 包括Microsoft Azure使用MinIO的S3网关 - 这一指标超过其他同类产品的总和。。

# 本平台提供的对象存储功能

OpenDao开源社区云服务系统平台主要提供创建Bucket、查看所有Bucket、删除Bucket、上传资源文件,查看文件信息,分享文件(生成文件链接),删除文件。

OpenDao开源社区云服务系统平台为用户提供的6种不同的开发语言SDK,功能包含查看上传资源文件(putObject)、获取文件信息(getObject)、删除资源文件(removeObject)。SDK调用方法如下

# JavaScript Client API参考文档

# 1、初使化Minio Client object

var Minio = require('minio')
var minioClient = new Minio.Client({
    endPoint: '订阅Opendao对象存储获取到的endPoint',
    port: 9000,
    useSSL: true,
    accessKey: '订阅Opendao对象存储获取到的accessKey',
    secretKey: '订阅Opendao对象存储获取到的secretKey'
});
1
2
3
4
5
6
7
8

# 2、上传资源文件

从一个stream/Buffer中上传一个对象。

参数 类型 描述
bucketName string 存储桶名称。
objectName string 对象名称。
stream Stream 可以读的流。
size number 对象的大小(可选)。
contentType string 对象的Content-Type(可选,默认是application/octet-stream)。
callback(err, etag) function 如果err不是null则代表有错误,etag _string_是上传的对象的etag值。如果没有传callback的话,则返回一个Promise对象。

示例

var file = '/tmp/40mbfile'
var fileStream = Fs.createReadStream(file)
var fileStat = Fs.stat(file, function(err, stats) {
  if (err) {
    return console.log(err)
  }
  minioClient.putObject('mybucket', '40mbfile', fileStream, stats.size, function(err, etag) {
    return console.log(err, etag) // err should be null
  })
})
1
2
3
4
5
6
7
8
9
10

从"Buffer"或者"string"上传

参数 类型 描述
bucketName string 存储桶名称。
objectName string 对象名称。
string or Buffer Stream or Buffer 字符串可者缓冲区。
contentType string 对象的Content-Type(可选,默认是application/octet-stream)。
callback(err, etag) function 如果err不是null则代表有错误,etag _string_是上传的对象的etag值。

示例

var buffer = 'Hello World'
minioClient.putObject('mybucket', 'hello-file', buffer, function(err, etag) {
  return console.log(err, etag) // err should be null
})
1
2
3
4

# 3、操作对象

getObject(bucketName, objectName[, callback]) 下载对象
1
参数 类型 描述
bucketName string 存储桶名称。
objectName string 对象名称。
callback(err, etag) function 回调函数,第一个参数是错误信息。stream是对象的内容。如果没有传callback的话,则返回一个Promise对象。

示例

var size = 0
minioClient.getObject('mybucket', 'photo.jpg', function(err, dataStream) {
  if (err) {
    return console.log(err)
  }
  dataStream.on('data', function(chunk) {
    size += chunk.length
  })
  dataStream.on('end', function() {
    console.log('End. Total size = ' + size)
  })
  dataStream.on('error', function(err) {
    console.log(err)
  })
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 4、删除对象

 removeObject(bucketName, objectName[, callback]) 删除一个对象。
1
参数 类型 描述
bucketName string 存储桶名称。
objectName string 对象名称。
callback(err, etag) function 如果err不是null则代表有错误。如果没有传callback的话,则返回一个Promise对象。

示例

 minioClient.removeObject('mybucket', 'photo.jpg', function(err) {
  if (err) {
    return console.log('Unable to remove object', err)
  }
  console.log('Removed the object')
})
1
2
3
4
5
6

# Java Client API参考文档

# 1、初使化Minio Client object

MinioClient minioClient = new MinioClient("https://play.min.io", "your-access-key", "your-secret-key");
1

# 2、通过InputStream上传对象

public void putObject(String bucketName, String objectName, InputStream stream, long size, String contentType)

通过InputStream上传对象。

参数 类型 描述
bucketName string 存储桶名称。
objectName string 对象名称。
stream InputStream 可以读的流。
size long 要上传的stream的size
contentType string Content type。
返回值类型 异常
None 异常列表:
InvalidBucketNameException : 不合法的存储桶名称。
NoResponseException : 服务器无响应。
IOException : 连接异常。
org.xmlpull.v1.XmlPullParserException : 解析返回的XML异常。
ErrorResponseException : 执行失败异常。
InternalException : 内部错误。

示例

Copytry {
  StringBuilder builder = new StringBuilder();
  for (int i = 0; i < 1000; 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("Jackdaws love my big sphinx of quartz: Similarly, used by Windows XP for some fonts. ");
    builder.append("(31 letters)\n");
    builder.append("Pack my box with five dozen liquor jugs: According to Wikipedia, this one is used on ");
    builder.append("NASAs Space Shuttle. (32 letters)\n");
    builder.append("The quick onyx goblin jumps over the lazy dwarf: Flavor text from an Unhinged Magic Card. ");
    builder.append("(39 letters)\n");
    builder.append("How razorback-jumping frogs can level six piqued gymnasts!: Not going to win any brevity ");
    builder.append("awards at 49 letters long, but old-time Mac users may recognize it.\n");
    builder.append("Cozy lummox gives smart squid who asks for job pen: A 41-letter tester sentence for Mac ");
    builder.append("computers after System 7.\n");
    builder.append("A few others we like: Amazingly few discotheques provide jukeboxes; Now fax quiz Jack! my ");
    builder.append("brave ghost pled; Watch Jeopardy!, Alex Trebeks fun TV quiz game.\n");
    builder.append("- --\n");
  }
  ByteArrayInputStream bais = new
  ByteArrayInputStream(builder.toString().getBytes("UTF-8"));
  // 创建对象
  minioClient.putObject("mybucket", "myobject", bais, bais.available(), "application/octet-stream");
  bais.close();
  System.out.println("myobject is uploaded successfully");
} catch(MinioException e) {
  System.out.println("Error occurred: " + e);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

# 3、通过文件上传到对象中

public void putObject(String bucketName, String objectName, String fileName)
1

通过InputStream上传对象。

参数 类型 描述
bucketName string 存储桶名称。
objectName string 对象名称。
fileName String File name。
返回值类型 异常
None 异常列表:
InvalidBucketNameException : 不合法的存储桶名称。
NoResponseException : 服务器无响应。
IOException : 连接异常。
org.xmlpull.v1.XmlPullParserException : 解析返回的XML异常。
ErrorResponseException : 执行失败异常。
InternalException : 内部错误。

示例

try {
  minioClient.putObject("mybucket",  "island.jpg", "/mnt/photos/island.jpg")
  System.out.println("island.jpg is uploaded successfully");
} catch(MinioException e) {
  System.out.println("Error occurred: " + e);
}
1
2
3
4
5
6

# 4、获取对象的元数据

public InputStream getObject(String bucketName, String objectName, long offset)
1
参数 类型 描述
bucketName string 存储桶名称。
objectName string 对象名称。
返回值类型 异常
None 异常列表:
InvalidBucketNameException : 不合法的存储桶名称。
NoResponseException : 服务器无响应。
IOException : 连接异常。
org.xmlpull.v1.XmlPullParserException : 解析返回的XML异常。
ErrorResponseException : 执行失败异常。
InternalException : 内部错误。

示例

try {
  // 调用statObject()来判断对象是否存在。
  // 如果不存在, statObject()抛出异常,
  // 否则则代表对象存在。
  minioClient.statObject("mybucket", "myobject");

  // 获取"myobject"的输入流。
  InputStream stream = minioClient.getObject("mybucket", "myobject");

  // 读取输入流直到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));
  }

  // 关闭流,此处为示例,流关闭最好放在finally块。
  stream.close();
} catch (MinioException e) {
  System.out.println("Error occurred: " + e);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 5、删除对象

public void removeObject(String bucketName, String objectName)
1
参数 类型 描述
bucketName string 存储桶名称。
objectName string 对象名称。
返回值类型 异常
None 异常列表:
InvalidBucketNameException : 不合法的存储桶名称。
NoResponseException : 服务器无响应。
IOException : 连接异常。
org.xmlpull.v1.XmlPullParserException : 解析返回的XML异常。
ErrorResponseException : 执行失败异常。
InternalException : 内部错误。

示例

try {
      // 从mybucket中删除myobject。
      minioClient.removeObject("mybucket", "myobject");
      System.out.println("successfully removed mybucket/myobject");
} catch (MinioException e) {
      System.out.println("Error: " + e);
}
1
2
3
4
5
6
7

# Python Client API参考文档

# 1、初使化Minio Client object

from minio import Minio
from minio.error import ResponseError

minioClient = Minio('play.min.io',
                  access_key='your-access-key',
                  secret_key='your-secret-key',
                  secure=True)
1
2
3
4
5
6
7

# 2、添加一个新的对象到对象存储服务

put_object(bucket_name, object_name, data, length, content_type='application/octet-stream', metadata=None)
1

通过InputStream上传对象。

参数 类型 描述
bucket_name string 存储桶名称。
object_name string 对象名称。
data io.RawIOBase 任何实现了io.RawIOBase的python对象。
length int 对象的总长度。
content_type string 对象的Content type。(可选,默认是“application/octet-stream”)。
metadata dict 其它元数据。(可选,默认是None)。
返回值类型 类型 描述
etag string 对象的etag值。

示例

import os
# Put a file with default content-type, upon success prints the etag identifier computed by server.
try:
    with open('my-testfile', 'rb') as file_data:
        file_stat = os.stat('my-testfile')
        print(minioClient.put_object('mybucket', 'myobject',
                               file_data, file_stat.st_size))
except ResponseError as err:
    print(err)

# Put a file with 'application/csv'.
try:
    with open('my-testfile.csv', 'rb') as file_data:
        file_stat = os.stat('my-testfile.csv')
        minioClient.put_object('mybucket', 'myobject.csv', file_data,
                    file_stat.st_size, content_type='application/csv')
except ResponseError as err:
    print(err)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 3、通过文件上传到对象中

fput_object(bucket_name, object_name, file_path, content_type='application/octet-stream', metadata=None)
1

通过文件上传到对象中。

参数 类型 描述
bucket_name string 存储桶名称。
object_name string 对象名称。
file_path String 本地文件的路径,会将该文件的内容上传到对象存储服务上。
content_type String 对象的Content type(可选,默认是“application/octet-stream”)。
metadata dict 其它元数据(可选,默认是None)。
返回值参数 类型 描述
etag string 对象的etag值。

示例

# Put an object 'myobject' with contents from '/tmp/otherobject', upon success prints the etag identifier computed by server.
try:
    print(minioClient.fput_object('mybucket', 'myobject', '/tmp/otherobject'))
except ResponseError as err:
    print(err)

# Put on object 'myobject.csv' with contents from
# '/tmp/otherobject.csv' as 'application/csv'.
try:
    print(minioClient.fput_object('mybucket', 'myobject.csv',
                             '/tmp/otherobject.csv',
                             content_type='application/csv'))
except ResponseError as err:
    print(err)
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 4、获取对象的元数据

get_object(bucket_name, object_name, request_headers=None) 	
1
参数 类型 描述
bucket_name string 存储桶名称。
object_name string 对象名称。
request_headers dict 额外的请求头信息 (可选,默认为None)。
返回值参数 类型 描述
object urllib3.response.HTTPResponse http streaming reader。

示例

# Get a full object.
try:
    data = minioClient.get_object('mybucket', 'myobject')
    with open('my-testfile', 'wb') as file_data:
        for d in data.stream(32*1024):
            file_data.write(d)
except ResponseError as err:
    print(err)
1
2
3
4
5
6
7
8

# 5、删除对象

remove_object(bucket_name, object_name)
1
参数 类型 描述
bucket_name string 存储桶名称。
object_name string 对象名称。

示例

# Remove an object.
try:
    minioClient.remove_object('mybucket', 'myobject')
except ResponseError as err:
    print(err)
1
2
3
4
5

# Go Client API文档参考文档

# 1、初使化Minio Client object

package main

import (
    "fmt"

    "github.com/minio/minio-go/v6"
)

func main() {
        // 使用ssl
        ssl := true

        // 初使化minio client对象。
        minioClient, err := minio.New("play.min.io", "your-access-key", "your-secret-key", ssl)
        if err != nil {
                fmt.Println(err)
                return
        }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 2、添加一个新的对象到对象存储服务

PutObject(bucketName, objectName string, reader io.Reader, objectSize int64,opts PutObjectOptions) (n int, err error)
1

通过InputStream上传对象。

参数 类型 描述
bucketName string 存储桶名称。
objectName string 对象名称。
reader io.Reader 任意实现了io.Reader的GO类型。
objectSize int64 上传的对象的大小,-1代表未知。
opts minio.PutObjectOptions 允许用户设置可选的自定义元数据,内容标题,加密密钥和用于分段上传操作的线程数量。

minio.PutObjectOptions

属性 类型 描述
opts.UserMetadata map[string]string 用户元数据的Map。
opts.Progress io.Reader 获取上传进度的Reader
opts.ContentType string 对象的Content type, 例如"application/text"
opts.ContentEncoding string 对象的Content encoding,例如"gzip"
opts.ContentDisposition string 对象的Content disposition, "inline"
opts.CacheControl string 指定针对请求和响应的缓存机制,例如"max-age=600"
opts.EncryptMaterials encrypt.Materials encrypt包提供的对流加密的接口,(更多信息,请看https://godoc.org/github.com/minio/minio-go/v6)

示例

file, err := os.Open("my-testfile")
if err != nil {
    fmt.Println(err)
    return
}
defer file.Close()

fileStat, err := file.Stat()
if err != nil {
    fmt.Println(err)
    return
}

n, err := minioClient.PutObject("mybucket", "myobject", file, fileStat.Size(), minio.PutObjectOptions{ContentType:"application/octet-stream"})
if err != nil {
    fmt.Println(err)
    return
}
fmt.Println("Successfully uploaded bytes: ", n)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 3、获取对象的元数据

GetObject(bucketName, objectName string, opts GetObjectOptions) (*Object, error)
1

参数

参数 类型 描述
bucketName string 存储桶名称。
objectName string 对象名称。
opts minio.GetObjectOptions GET请求的一些额外参数,像encryption,If-Match

minio.GetObjectOptions

返回值参数 类型 描述
opts.Materials *minio.Object 对象的统计信息,格式如下:

返回值

参数 类型 描述
object *minio.Object _minio.Object_代表了一个object reader。它实现了io.Reader, io.Seeker, io.ReaderAt and io.Closer接口。

示例

object, err := minioClient.GetObject("mybucket", "myobject", minio.GetObjectOptions{})
if err != nil {
    fmt.Println(err)
    return
}
localFile, err := os.Create("/tmp/local-file.jpg")
if err != nil {
    fmt.Println(err)
    return
}
if _, err = io.Copy(localFile, object); err != nil {
    fmt.Println(err)
    return
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 4、删除对象

RemoveObject(bucketName, objectName string) error
1
参数 类型 描述
bucketName string 存储桶名称。
objectName string 对象名称。

示例

err = minioClient.RemoveObject("mybucket", "myobject")
if err != nil {
    fmt.Println(err)
    return
}
1
2
3
4
5

# .NET Client API参考文档

# 1、初使化Minio Client object

var minioClient = new MinioClient("play.min.io",
                                       "your-access-key",
                                       "your-secret-key"
                                 ).WithSSL();
1
2
3
4

# 2、添加一个新的对象到对象存储服务

PutObjectAsync(string bucketName, string objectName, Stream data, long size, string contentType)
1

通过InputStream上传对象。

参数 类型 描述
bucketName string 存储桶名称。
objectName string 对象名称。
data Stream 要上传的Stream对象。
size long 流的大小。
contentType string 文件的Content type,默认是"application/octet-stream"。
metaData Dictionary<string,string> 元数据头信息的Dictionary对象,默认是null。

| cancellationToken| System.Threading.CancellationToken | 可选参数。默认是default(CancellationToken) |

返回值类型 异常
Task 列出的异常:
InvalidBucketNameException : 无效的存储桶名称。
ConnectionException : 连接异常。
InternalClientException : 内部错误。
EntityTooLargeException: 要上传的大小超过最大允许值。
UnexpectedShortReadException: 读取的数据大小比指定的size要小。
ArgumentNullException: Stream为null。

示例

try
{
    byte[] bs = File.ReadAllBytes(fileName);
    System.IO.MemoryStream filestream = new System.IO.MemoryStream(bs);

    await minio.PutObjectAsync("mybucket",
                               "island.jpg",
                                filestream,
                                filestream.Length,
                               "application/octet-stream");
    Console.Out.WriteLine("island.jpg is uploaded successfully");
}
catch(MinioException e)
{
    Console.Out.WriteLine("Error occurred: " + e);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
### 3、通过文件上传到对象中。(PutObjectAsync).

PutObjectAsync(string bucketName, string objectName, string filePath, string contentType=null)
1
2
3

参数

参数 类型 描述
bucketName string 存储桶名称。
objectName string 对象名称。
fileName string 要上传的本地文件名。
contentType string 文件的Content type,默认是"application/octet-stream"。
metadata Dictionary<string,string> 元数据头信息的Dictionary对象,默认是null。

返回值

返回值类型 异常
Task 列出的异常:
_InvalidBucketNameException : 无效的存储桶名称。
ConnectionException : 连接异常。
InternalClientException : 内部错误。
EntityTooLargeException: 要上传的大小超过最大允许值。

示例

try
{
    await minio.PutObjectAsync("mybucket", "island.jpg", "/mnt/photos/island.jpg",contentType: "application/octet-stream");
    Console.Out.WriteLine("island.jpg is uploaded successfully");
}
catch(MinioException e)
{
    Console.Out.WriteLine("Error occurred: " + e);
}
1
2
3
4
5
6
7
8
9

# 4、操作对象

Task GetObjectAsync(string bucketName, string objectName, Action<Stream> callback, CancellationToken cancellationToken = default(CancellationToken))
1
参数 类型 描述
bucketName string 存储桶名称。
objectName string 对象名称。
callback Action 处理流的回调函数。
cancellationToken System.Threading.CancellationToken 可选参数。默认是default(CancellationToken)。
返回值类型 异常
Task: Task回调,返回含有对象数据的InputStream。 列出的异常:
string
ConnectionException : 连接异常。
InternalClientException : 内部错误。

示例

err = minioClient.RemoveObject("mybucket", "myobject")
if err != nil {
    fmt.Println(err)
    return
}
1
2
3
4
5

# 5、删除对象

RemoveObjectAsync(string bucketName, string objectName)
1
参数 类型 描述
bucketName string 存储桶名称。
objectName string 对象名称。
cancellationToken System.Threading.CancellationToken 可选参数。默认是default(CancellationToken)。
返回值类型 异常
Task 列出的异常:
InvalidBucketNameException : 无效的存储桶名称。
ConnectionException : 连接异常。
InternalClientException : 内部错误。

示例

try
{
    // Remove objectname from the bucket my-bucketname.
    await minioClient.RemoveObjectAsync("mybucket", "myobject");
    Console.Out.WriteLine("successfully removed mybucket/myobject");
}
catch (MinioException e)
{
    Console.Out.WriteLine("Error: " + e);
}
1
2
3
4
5
6
7
8
9
10

# Haskell Client API参考文档

# 1、初使化Minio Client object

awsCI :: ConnectInfo
awsCI { connectAccesskey = "your-access-key"
      , connectSecretkey = "your-secret-key"
      }
1
2
3
4

# 2、添加一个新的对象到对象存储服务

putObject :: Bucket -> Object -> C.ConduitM () ByteString Minio () -> Maybe Int64 -> PutObjectOptions -> Minio ()
1

通过InputStream上传对象。

参数 类型 描述
bucketName string 存储桶名称。
objectName string 对象名称。
inputSrc C.ConduitM () ByteString Minio () 管道生产者的ByteString值。
size Int64 提供流大小(可选)
opts PutObjectOptions 为对象提供其他元数据的可选参数。

示例

{-# LANGUAGE OverloadedStrings #-}
import           Network.Minio

import qualified Data.Conduit.Combinators as CC

import           Prelude

-- | The following example uses MinIO play server at
-- https://play.min.io.  The endpoint and associated
-- credentials are provided via the libary constant,
--
-- > minioPlayCI :: ConnectInfo
--

main :: IO ()
main = do
  let
      bucket = "test"
      object = "obj"
      localFile = "/etc/lsb-release"
      kb15 = 15 * 1024

  -- Eg 1. Upload a stream of repeating "a" using putObject with default options.
  res <- runMinio minioPlayCI $
    putObject bucket object (CC.repeat "a") (Just kb15) def
  case res of
    Left e   -> putStrLn $ "putObject failed." ++ show e
    Right () -> putStrLn "putObject succeeded."
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

# 3、操作对象

getObject :: Bucket -> Object -> GetObjectOptions -> Minio (C.ConduitM () ByteString Minio ())
1
参数 类型 描述
bucketName string 存储桶名称。
objectName string 对象名称。
opts GetObjectOptions GET请求的选项指定其他选项,例如If-Match,Range。

GetObjectOptions记录类型

字段 类型 描述
gooRange Maybe ByteRanges 表示对象的字节范围。 例如ByteRangeFromTo 0 9表示对象的前十个字节
gooIfMatch Maybe ETag (alias for Text) (可选)对象的ETag应该匹配
gooIfNoneMatch Maybe ETag (alias for Text) 可选)对象的ETag不匹配
gooIfUnmodifiedSince Maybe UTCTime (可选)自对象未被修改以来的时间
gooIfModifiedSince Maybe UTCTime 可选)自修改对象以来的时间

返回值

可以增量读取返回值以处理以下内容 物体。 返回值类型 描述
Minio (C.ConduitM () ByteString Minio ()) 字节串值的管道源。

示例

{-# LANGUAGE OverloadedStrings #-}
import           Network.Minio

import qualified Data.Conduit        as C
import qualified Data.Conduit.Binary as CB

import           Prelude

-- | The following example uses MinIO play server at
-- https://play.min.io.  The endpoint and associated
-- credentials are provided via the libary constant,
--
-- > minioPlayCI :: ConnectInfo
--

main :: IO ()
main = do
  let
      bucket = "my-bucket"
      object = "my-object"
  res <- runMinio minioPlayCI $ do
    src <- getObject bucket object def
    C.connect src $ CB.sinkFileCautious "/tmp/my-object"

  case res of
    Left e  -> putStrLn $ "getObject failed." ++ (show e)
    Right _ -> putStrLn "getObject succeeded."
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# 4、删除对象

removeObject :: Bucket -> Object -> Minio ()
1
参数 类型 描述
bucketName string 存储桶名称。
objectName string 对象名称。
返回值类型 异常
Task 列出的异常:
InvalidBucketNameException : 无效的存储桶名称。
ConnectionException : 连接异常。
InternalClientException : 内部错误。

示例

{-# Language OverloadedStrings #-}
import Network.Minio

main :: IO ()
main = do
  let
    bucket = "mybucket"
    object = "myobject"

  res <- runMinio minioPlayCI $ do
           removeObject bucket object

  case res of
    Left e -> putStrLn $ "Failed to remove " ++ show bucket ++ "/" ++ show object
    Right _ -> putStrLn "Removed object successfully"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15