# 什么是对象存储
对象存储(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'
});
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
})
})
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
})
2
3
4
# 3、操作对象
getObject(bucketName, objectName[, callback]) 下载对象
参数 | 类型 | 描述 |
---|---|---|
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)
})
})
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 4、删除对象
removeObject(bucketName, objectName[, callback]) 删除一个对象。
参数 | 类型 | 描述 |
---|---|---|
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')
})
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");
# 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);
}
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)
通过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);
}
2
3
4
5
6
# 4、获取对象的元数据
public InputStream getObject(String bucketName, String objectName, long offset)
参数 | 类型 | 描述 |
---|---|---|
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);
}
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)
参数 | 类型 | 描述 |
---|---|---|
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);
}
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)
2
3
4
5
6
7
# 2、添加一个新的对象到对象存储服务
put_object(bucket_name, object_name, data, length, content_type='application/octet-stream', metadata=None)
通过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)
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)
通过文件上传到对象中。
参数 | 类型 | 描述 |
---|---|---|
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)
2
3
4
5
6
7
8
9
10
11
12
13
14
# 4、获取对象的元数据
get_object(bucket_name, object_name, request_headers=None)
参数 | 类型 | 描述 |
---|---|---|
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)
2
3
4
5
6
7
8
# 5、删除对象
remove_object(bucket_name, object_name)
参数 | 类型 | 描述 |
---|---|---|
bucket_name | string | 存储桶名称。 |
object_name | string | 对象名称。 |
示例
# Remove an object.
try:
minioClient.remove_object('mybucket', 'myobject')
except ResponseError as err:
print(err)
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
}
}
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)
通过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)
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)
参数
参数 | 类型 | 描述 |
---|---|---|
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
}
2
3
4
5
6
7
8
9
10
11
12
13
14
# 4、删除对象
RemoveObject(bucketName, objectName string) error
参数 | 类型 | 描述 |
---|---|---|
bucketName | string | 存储桶名称。 |
objectName | string | 对象名称。 |
示例
err = minioClient.RemoveObject("mybucket", "myobject")
if err != nil {
fmt.Println(err)
return
}
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();
2
3
4
# 2、添加一个新的对象到对象存储服务
PutObjectAsync(string bucketName, string objectName, Stream data, long size, string contentType)
通过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);
}
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)
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);
}
2
3
4
5
6
7
8
9
# 4、操作对象
Task GetObjectAsync(string bucketName, string objectName, Action<Stream> callback, CancellationToken cancellationToken = default(CancellationToken))
参数 | 类型 | 描述 |
---|---|---|
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
}
2
3
4
5
# 5、删除对象
RemoveObjectAsync(string bucketName, string objectName)
参数 | 类型 | 描述 |
---|---|---|
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);
}
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"
}
2
3
4
# 2、添加一个新的对象到对象存储服务
putObject :: Bucket -> Object -> C.ConduitM () ByteString Minio () -> Maybe Int64 -> PutObjectOptions -> Minio ()
通过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."
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 ())
参数 | 类型 | 描述 |
---|---|---|
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."
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 ()
参数 | 类型 | 描述 |
---|---|---|
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"
2
3
4
5
6
7
8
9
10
11
12
13
14
15