文档

JavaScript 客户端 API 参考 Slack

初始化 MinIO 客户端对象。

MinIO

import * as Minio from 'minio'

const minioClient = new Minio.Client({
  endPoint: 'play.min.io',
  port: 9000,
  useSSL: true,
  accessKey: 'Q3AM3UQ867SPQQA43P2F',
  secretKey: 'zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG',
})

AWS S3

import * as Minio from 'minio'

const s3Client = new Minio.Client({
  endPoint: 's3.amazonaws.com',
  accessKey: 'YOUR-ACCESSKEYID',
  secretKey: 'YOUR-SECRETACCESSKEY',
})

存储桶操作

对象操作

预签名操作

存储桶策略和通知操作

自定义设置

makeBucket

getObject

presignedUrl

getBucketNotification

setS3TransferAccelerate

listBuckets

getPartialObject

presignedGetObject

setBucketNotification

bucketExists

fGetObject

presignedPutObject

removeAllBucketNotification

removeBucket

putObject

presignedPostPolicy

getBucketPolicy

listObjects

fPutObject

setBucketPolicy

listObjectsV2

copyObject

listenBucketNotification

listIncompleteUploads

statObject

getBucketVersioning

removeObject

setBucketVersioning

removeObjects

getBucketTagging

removeIncompleteUpload

setBucketTagging

putObjectRetention

removeBucketTagging

getObjectRetention

setBucketLifecycle

setObjectTagging

getBucketLifecycle

removeObjectTagging

removeBucketLifecycle

getObjectTagging

setObjectLockConfig

getObjectLegalHold

getObjectLockConfig

setObjectLegalHold

getBucketEncryption

composeObject

setBucketEncryption

selectObjectContent

removeBucketEncryption

setBucketReplication

getBucketReplication

removeBucketReplication

1. 构造函数

new Minio.Client ({endPoint, port, useSSL, accessKey, secretKey, region, transport, sessionToken, partSize})

new Minio.Client ({endPoint, port, useSSL, accessKey, secretKey, region, transport, sessionToken, partSize})

初始化一个新的客户端对象。

参数

参数

类型

描述

endPoint

字符串

endPoint 是一个主机名或 IP 地址。

port

数字

TCP/IP 端口号。此输入是可选的。默认值为 HTTP 的 80 和 HTTPs 的 443。

useSSL

布尔值

如果设置为 true,则使用 https 而不是 http。默认值为 true。

accessKey

字符串

accessKey 是一个类似用户 ID 的值,用于唯一标识您的帐户。

secretKey

字符串

secretKey 是您帐户的密码。

sessionToken

字符串

设置此值以提供 x-amz-security-token(AWS S3 特定)。(可选)

region

字符串

设置此值以覆盖区域缓存。(可选)

transport

字符串

设置此值以传入自定义传输。(可选)

partSize

数字

设置此值以覆盖多部分上传的默认部分大小 64MB。(可选)

pathStyle

布尔值

设置此值以覆盖非 AWS 端点的默认访问行为(路径)。默认值为 true。(可选)

transportAgent

Agent

设置此值以提供自定义 HTTP(s) 代理来处理超时、TLS 处理和低级套接字配置。(可选)

示例

为 MinIO 创建客户端

import * as Minio from 'minio'

const minioClient = new Minio.Client({
  endPoint: 'play.min.io',
  port: 9000,
  useSSL: true,
  accessKey: 'Q3AM3UQ867SPQQA43P2F',
  secretKey: 'zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG',
})

为 AWS S3 创建客户端

import * as Minio from 'minio'

const s3Client = new Minio.Client({
  endPoint: 's3.amazonaws.com',
  accessKey: 'YOUR-ACCESSKEYID',
  secretKey: 'YOUR-SECRETACCESSKEY',
})

使用临时凭据创建客户端

import * as Minio from 'minio'

const s3Client = new Minio.Client({
  endPoint: 's3.amazonaws.com',
  accessKey: 'YOUR-TEMP-ACCESSKEYID',
  secretKey: 'YOUR-TEMP-SECRETACCESSKEY',
  sessionToken: 'YOUR-TEMP-SESSIONTOKEN',
})

使用自定义 HTTPS 代理创建客户端

import * as Minio from 'minio'
import * as fs from 'fs'
import * as https from 'https'

const s3Client = new Minio.Client({
  endPoint: 'play.min.io',
  port: 9000,
  useSSL: true,
  accessKey: 'Q3AM3UQ867SPQQA43P2F',
  secretKey: 'zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG',
  transportAgent: new https.Agent({
    timeout: 10000,
    ca: fs.readFileSync('path/to/ca.cert'),
    cert: fs.readFileSync('path/to/public.cert'),
    key: fs.readFileSync('path/to/secret.key'),
    keepAlive: false,
  }),
})

注意:以下示例可能依赖于顶级 await。

2. 存储桶操作

async makeBucket(bucketName, [region, makeOpts]): Promise

创建一个新的存储桶。

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

region

字符串

创建存储桶的区域。此参数是可选的。默认值为 us-east-1。

makeOpts

object

创建存储桶的选项。例如 {ObjectLocking:true}(可选)

示例

await minioClient.makeBucket('mybucket', 'us-east-1')
console.log('Bucket created successfully in "us-east-1".')

示例 1 创建一个启用了对象锁定的存储桶。

minioClient.makeBucket('mybucket', 'us-east-1', { ObjectLocking: true }, function (err) {
  if (err) return console.log('Error creating bucket with object lock.', err)
  console.log('Bucket created successfully in "us-east-1" and enabled object lock')
})

listBuckets()

列出所有存储桶。

参数

NIL

返回格式为以下对象的数组:

参数

类型

描述

bucket.name

字符串

存储桶名称

bucket.creationDate

日期

创建存储桶的日期。

示例

请参阅:list-buckets.mjs

try {
  const buckets = await minioClient.listBuckets()
  console.log('Success', buckets)
} catch (err) {
  console.log(err.message)
}

async bucketExists(bucketName): Promise

检查存储桶是否存在。

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

示例

const exists = await minioClient.bucketExists('mybucket')
if (exists) {
  return console.log('Bucket exists.')
}

removeBucket(bucketName[, callback])

删除一个存储桶。

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

callback(err)

function

如果存储桶成功删除,errnull。如果没有传递回调,则会返回一个 Promise

示例

try {
  await minioClient.removeBucket('mybucket')
  console.log('Bucket removed successfully.')
} catch (err) {
  console.log('unable to remove bucket.')
}

listObjects(bucketName, prefix, recursive [,listOpts])

列出存储桶中的所有对象。

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

prefix

字符串

要列出的对象的名称前缀(可选,默认值为 '')。

recursive

布尔值

true 表示递归样式的列出,而 false 表示以 ‘/’ 分隔的目录样式的列出。(可选,默认值为 false)。

listOpts

object

列出对象的查询参数,其中可能包含 {IncludeVersion: _bool_ }(可选)

返回值

参数

类型

描述

stream

Stream

发射存储桶中对象的流。

对象的格式如下:

参数

类型

描述

obj.name

字符串

对象的名称。

obj.prefix

字符串

对象前缀的名称。

obj.size

数字

对象的大小。

obj.etag

字符串

对象的 ETag。

obj.versionId

字符串

对象的版本 ID。

obj.isDeleteMarker

boolean

如果它是一个删除标记,则为 true。

obj.lastModified

日期

修改时间戳。

示例

const data = []
const stream = minioClient.listObjects('mybucket', '', true)
stream.on('data', function (obj) {
  data.push(obj)
})
stream.on('end', function () {
  console.log(data)
})
stream.on('error', function (err) {
  console.log(err)
})

示例 1 获取对象版本

const data = []
const stream = minioClient.listObjects('mybucket', '', true, { IncludeVersion: true })
stream.on('data', function (obj) {
  data.push(obj)
})
stream.on('end', function () {
  console.log(data)
})
stream.on('error', function (err) {
  console.log(err)
})

listObjectsV2(bucketName, prefix, recursive, startAfter)

使用 S3 列出对象 V2 API 列出存储桶中的所有对象

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

prefix

字符串

要列出的对象的名称前缀(可选,默认值为 '')。

recursive

布尔值

true 表示递归样式的列出,而 false 表示以 ‘/’ 分隔的目录样式的列出。(可选,默认值为 false)。

startAfter

字符串

指定在存储桶中列出对象时开始后的对象名称。(可选,默认值为 '')。

返回值

参数

类型

描述

stream

Stream

发射存储桶中对象的流。

对象的格式如下:

参数

类型

描述

obj.name

字符串

对象的名称。

obj.prefix

字符串

对象前缀的名称。

obj.size

数字

对象的大小。

obj.etag

字符串

对象的 ETag。

obj.lastModified

日期

修改时间戳。

示例

const stream = minioClient.listObjectsV2('mybucket', '', true, '')
stream.on('data', function (obj) {
  console.log(obj)
})
stream.on('error', function (err) {
  console.log(err)
})

listObjectsV2WithMetadata(bucketName, prefix, recursive, startAfter)

使用 S3 列出对象 V2 API 列出存储桶中的所有对象及其元数据

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

prefix

字符串

要列出的对象的名称前缀(可选,默认值为 '')。

recursive

布尔值

true 表示递归样式的列出,而 false 表示以 ‘/’ 分隔的目录样式的列出。(可选,默认值为 false)。

startAfter

字符串

指定在存储桶中列出对象时开始后的对象名称。(可选,默认值为 '')。

返回值

参数

类型

描述

stream

Stream

发射存储桶中对象的流。

对象的格式如下:

参数

类型

描述

obj.name

字符串

对象的名称。

obj.prefix

字符串

对象前缀的名称。

obj.size

数字

对象的大小。

obj.etag

字符串

对象的 ETag。

obj.lastModified

日期

修改时间戳。

obj.metadata

object

对象的元数据。

示例

const stream = minioClient.extensions.listObjectsV2WithMetadata('mybucket', '', true, '')
stream.on('data', function (obj) {
  console.log(obj)
})
stream.on('error', function (err) {
  console.log(err)
})

listIncompleteUploads(bucketName, prefix, recursive)

列出存储桶中部分上传的对象。

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

prefix

字符串

部分上传的对象名称的前缀。(可选,默认值为 ''

recursive

布尔值

true 表示递归样式的列出,而 false 表示以 ‘/’ 分隔的目录样式的列出。(可选,默认值为 false)。

返回值

参数

类型

描述

stream

Stream

发射以下格式的对象:

参数

类型

描述

part.key

字符串

对象的名称。

part.uploadId

字符串

对象的上传 ID。

part.size

Integer

部分上传对象的大小。

示例

const Stream = minioClient.listIncompleteUploads('mybucket', '', true)
Stream.on('data', function (obj) {
  console.log(obj)
})
Stream.on('end', function () {
  console.log('End')
})
Stream.on('error', function (err) {
  console.log(err)
})

getBucketVersioning(bucketName)

获取存储桶的版本控制状态

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

示例

const versionInfo = await minioClient.getBucketVersioning('bucketname')
console.log('Success ', versionInfo)

setBucketVersioning(bucketName, versioningConfig)

在存储桶上设置版本控制状态

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

versioningConfig

object

版本控制配置,例如:{Status:"Enabled"}

示例

const versioningConfig = { Status: 'Enabled' }
await minioClient.setBucketVersioning('bucketname', versioningConfig)

setBucketReplication(bucketName, replicationConfig)

在存储桶上设置复制配置

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

replicationConfig

object

复制配置作为 JSON 对象

示例

const arnFromMcCli = 'arn:minio:replication::b22d653b-e4fb-4c5d-8140-7694c8e72ed4:dest-bucket'
const replicationConfig = {
  role: arnFromMcCli,
  rules: [
    {
      ID: 'cisea130mbms6splbmg0',
      Status: 'Enabled',
      Priority: 1,
      DeleteMarkerReplication: { Status: 'Enabled' },
      DeleteReplication: { Status: 'Enabled' },
      Destination: {
        Bucket: 'arn:aws:s3:::dest-bucket',
        StorageClass: 'REDUCED_REDUNDANCY',
      },
      SourceSelectionCriteria: { ReplicaModifications: { Status: 'Enabled' } },
      Filter: {
        //Possible values.
        // Prefix: '/',
        // Tag: [{ 'Key': 'key1', 'Value': 'value1' }, { 'Key': 'key2', 'Value': 'value2' }],//if only this,  =>    'DeleteMarkerReplication': { 'Status': 'Disabled' },
        And: {
          Prefix: '/',
          Tag: [
            { Key: 'key1', Value: 'value1' },
            { Key: 'key2', Value: 'value2' },
          ],
        },
      },
      ExistingObjectReplication: { Status: 'Enabled' },
    },
  ],
}

await s3Client.setBucketReplication('source-bucket', replicationConfig)

getBucketReplication(bucketName)

获取存储桶的复制配置

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

示例

const replicatinConfig = await minioClient.getBucketReplication('source-bucket')
console.log(replicatinConfig)

removeBucketReplication(bucketName)

删除存储桶的复制配置

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

示例

await minioClient.removeBucketReplication('source-bucket')

setBucketTagging(bucketName, tags)

在存储桶上设置标签

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

tags

object

标签映射配置,例如:{<tag-key-1>:<tag-value-1>}

示例

await minioClient.setBucketTagging('bucketname', tags)

removeBucketTagging(bucketName, callback)

删除存储桶上的标签

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

示例

await minioClient.removeBucketTagging('bucketname')

getBucketTagging(bucketName)

获取存储桶上的标签

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

示例

const tagList = await minioClient.getBucketTagging('bucketname')
console.log(tagList)

setBucketLifecycle(bucketName, lifecycleConfig)

在存储桶上设置生命周期配置

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

lifecycleConfig

object

有效的生命周期配置或(null'')以删除策略配置

示例

const lifecycleConfig = {
  Rule: [
    {
      ID: 'Transition and Expiration Rule',
      Status: 'Enabled',
      Filter: {
        Prefix: '',
      },
      Expiration: {
        Days: '3650',
      },
    },
  ],
}

await minioClient.setBucketLifecycle('bucketname', lifecycleConfig)

getBucketLifecycle(bucketName)

获取存储桶的生命周期配置

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

示例

await minioClient.getBucketLifecycle('bucketname')

removeBucketLifecycle(bucketName)

删除存储桶的生命周期配置

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

示例

await minioClient.removeBucketLifecycle('bucketname')

setObjectLockConfig(bucketName, lockConfig [, callback])

在存储桶上设置对象锁定配置

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

lockConfig

object

锁定配置可以是 {} 以重置或包含以下所有键值对的对象:{mode: ["COMPLIANCE"/'GOVERNANCE'], unit: ["Days"/"Years"], validity: <a-valid-number-for-unit>}

示例 1

await minioClient.setObjectLockConfig('my-bucketname', { mode: 'COMPLIANCE', unit: 'Days', validity: 10 })

示例 2 在存储桶上重置/删除对象锁定配置。

await s3Client.setObjectLockConfig('my-bucketname', {})

getObjectLockConfig(bucketName [, callback])

获取存储桶上的锁定配置

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

**示例** 获取存储桶上的对象锁定配置

await minioClient.getObjectLockConfig('my-bucketname')

setBucketEncryption(bucketName [,encryptionConfig])

在存储桶上设置加密配置

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

encryptionConfig

object

加密配置可以省略,也可以是 {} 或有效的支持的加密配置。默认情况下,应用:{Rule:[{ApplyServerSideEncryptionByDefault:{SSEAlgorithm:"AES256"}}]}

**示例** 在存储桶上设置加密配置

await s3Client.setBucketEncryption('my-bucketname')

示例 1 使用算法在存储桶上设置加密配置

await s3Client.setBucketEncryption('my-bucketname', {
  Rule: [{ ApplyServerSideEncryptionByDefault: { SSEAlgorithm: 'AES256' } }],
})

getBucketEncryption(bucketName)

获取存储桶的加密配置

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

**示例** 获取存储桶的加密配置

await s3Client.getBucketEncryption('my-bucketname')

removeBucketEncryption(bucketName)

删除存储桶的加密配置

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

**示例** 删除存储桶的加密配置

await s3Client.removeBucketEncryption('my-bucketname')

3. 对象操作

getObject(bucketName, objectName, getOpts)

将对象作为流下载。

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

objectName

字符串

对象的名称。

getOpts

object

获取对象的选项。默认值为 {}。(可选)

返回值

参数

类型

描述

stream

stream.Readable

发射对象内容的流。

示例

let size = 0
const dataStream = await minioClient.getObject('mybucket', 'photo.jpg')
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)
})

示例

获取特定对象版本。

let size = 0
const dataStream = await minioClient.getObject('mybucket', 'photo.jpg', { versionId: 'my-versionId' })
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)
})

示例

获取服务器端加密的对象。

let size = 0
const dataStream = await minioClient.getObject('mybucket', 'photo.jpg', {
  SSECustomerAlgorithm: 'AES256',
  SSECustomerKey: 'YOUR_KEY',
  SSECustomerKeyMD5: 'YOUR_MD5',
})
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)
})

getPartialObject(bucketName, objectName, offset, length, getOpts[, callback])

将对象的指定范围字节作为流下载。

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

objectName

字符串

对象的名称。

offset

数字

对象中流将从其开始的 offset

length

数字

流中将读取的对象的 length(可选,如果未指定,我们将从偏移量读取文件的其余部分)。

getOpts

object

获取对象的选项。默认值为 {}。(可选)

callback(err, stream)

function

如果发生错误,则回调将使用 err 调用。 stream 是对象内容流。如果没有传递回调,则会返回一个 Promise

返回值

参数

类型

描述

stream

Stream

发射对象内容的流。

示例

let size = 0
// reads 30 bytes from the offset 10.
const dataStream = await minioClient.getPartialObject('mybucket', 'photo.jpg', 10, 30)
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)
})

示例 获取对象的特定版本

const versionedObjSize = 0
// reads 30 bytes from the offset 10.
const dataStream = await minioClient.getPartialObject('mybucket', 'photo.jpg', 10, 30, { versionId: 'my-versionId' })
dataStream.on('data', function (chunk) {
  versionedObjSize += chunk.length
})
dataStream.on('end', function () {
  console.log('End. Total size = ' + versionedObjSize)
})
dataStream.on('error', function (err) {
  console.log(err)
})

示例 获取服务器端加密的对象。

const versionedObjSize = 0
// reads 30 bytes from the offset 10.
const dataStream = await minioClient.getPartialObject('mybucket', 'photo.jpg', 10, 30, {
  SSECustomerAlgorithm: 'AES256',
  SSECustomerKey: 'YOUR_KEY',
  SSECustomerKeyMD5: 'YOUR_MD5',
})
dataStream.on('data', function (chunk) {
  versionedObjSize += chunk.length
})
dataStream.on('end', function () {
  console.log('End. Total size = ' + versionedObjSize)
})
dataStream.on('error', function (err) {
  console.log(err)
})

fGetObject(bucketName, objectName, filePath, getOpts[, callback])

将对象下载并保存为本地文件系统中的文件。

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

objectName

字符串

对象的名称。

filePath

字符串

本地文件系统上对象数据将写入的路径。

getOpts

object

获取对象的选项。默认值为 {}。(可选)

callback(err)

function

如果发生错误,则回调将使用 err 调用。如果没有传递回调,则会返回一个 Promise

返回值

类型

描述

err

object

如果发生任何错误,则为错误

file

file

指定 filePath 的流输出文件

示例

minioClient.fGetObject('mybucket', 'photo.jpg', '/tmp/photo.jpg', function (err) {
  if (err) {
    return console.log(err)
  }
  console.log('success')
})

示例 将特定对象版本流式传输到文件。

minioClient.fGetObject(bucketName, objNameValue, './download/MyImage.jpg', { versionId: 'my-versionId' }, function (e) {
  if (e) {
    return console.log(e)
  }
  console.log('success')
})

示例 将服务器端加密的对象流式传输到文件。

minioClient.fGetObject(
  bucketName,
  objNameValue,
  './download/MyImage.jpg',
  {
    SSECustomerAlgorithm: 'AES256',
    SSECustomerKey: 'YOUR_KEY',
    SSECustomerKeyMD5: 'YOUR_MD5',
  },
  function (e) {
    if (e) {
      return console.log(e)
    }
    console.log('success')
  },
)

putObject(bucketName, objectName, stream, size, metaData[, callback])

从流/缓冲区上传对象。

从流

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

objectName

字符串

对象的名称。

stream

Stream

可读流。

size

数字

对象的大小(可选)。

metaData

Javascript 对象

对象的元数据(可选)。

callback(err, objInfo)

function

非空 err 表示错误,成功情况下,objInfo 包含对象的 etag 字符串versionId 字符串。如果没有传递回调函数,则返回一个 Promise

返回值

类型

描述

err

object

如果发生任何错误,则为错误

objInfo.etag

字符串

对象的 etag

objInfo.versionId

字符串

对象的 versionId(可选)

示例

单个对象的最大大小限制为 5TB。putObject 会透明地将大于 64MiB 的对象上传为多个部分。上传的数据使用 MD5SUM 签名进行仔细验证。

import * as Fs from 'fs'
const file = '/tmp/40mbfile'
const fileStream = Fs.createReadStream(file)
const fileStat = Fs.stat(file, function (err, stats) {
  if (err) {
    return console.log(err)
  }
  minioClient.putObject('mybucket', '40mbfile', fileStream, stats.size, function (err, objInfo) {
    if (err) {
      return console.log(err) // err should be null
    }
    console.log('Success', objInfo)
  })
})

从“Buffer”或“string”

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

objectName

字符串

对象的名称。

string or Buffer

StreamBuffer

可读流。

metaData

Javascript 对象

对象的元数据(可选)。

callback(err, etag)

function

非空 err 表示错误,etag 字符串 是上传对象的 etag。

示例

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

fPutObject(bucketName, objectName, filePath, metaData[, callback])

将文件内容上传到 objectName。

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

objectName

字符串

对象的名称。

filePath

字符串

要上传的文件的路径。

metaData

Javascript 对象

对象的元数据。

callback(err, objInfo) 函数:非空 err 表示错误,objInfo 对象 是关于上传对象的的信息,包含 versionId 字符串和 etag 字符串。

返回值

类型

描述

err

object

如果发生任何错误,则为错误

objInfo.etag

字符串

对象的 etag

objInfo.versionId

字符串

对象的 versionId(可选)

示例

单个对象的最大大小限制为 5TB。fPutObject 会透明地将大于 64MiB 的对象上传为多个部分。上传的数据使用 MD5SUM 签名进行仔细验证。

const file = '/tmp/40mbfile'
const metaData = {
  'Content-Type': 'text/html',
  'Content-Language': 123,
  'X-Amz-Meta-Testing': 1234,
  example: 5678,
}
minioClient.fPutObject('mybucket', '40mbfile', file, metaData, function (err, objInfo) {
  if (err) {
    return console.log(err)
  }
  console.log('Success', objInfo.etag, objInfo.versionId)
})

copyObject(targetBucketName, targetObjectName, sourceBucketNameAndObjectName [,conditions])

将源对象复制到指定存储桶中的新对象。

参数

参数

类型

描述

targetBucketName

字符串

存储桶的名称。

targetObjectName

字符串

对象的名称。

sourceBucketNameAndObjectName

字符串

要复制的文件的路径。

conditions

CopyConditions

在允许对象复制之前要满足的条件。

示例

const conds = new Minio.CopyConditions()
conds.setMatchETag('bd891862ea3e22c93ed53a098218791d')
await minioClient.copyObject('mybucket', 'newobject', '/mybucket/srcobject', conds)

statObject(bucketName, objectName, statOpts[, callback])

获取对象的元数据。

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

objectName

字符串

对象的名称。

statOpts

object

对象的版本,格式为 {versionId:"my-versionId"}。默认值为 {}。(可选)

callback(err, stat)

function

如果发生错误,err 不为 nullstat 包含以下列出的对象信息。如果没有传递回调函数,则返回一个 Promise

返回值

参数

类型

描述

stat.size

数字

对象的大小。

stat.etag

字符串

对象的 ETag。

stat.versionId

字符串

对象的版本。

stat.metaData

Javascript 对象

对象的元数据。

stat.lastModified

日期

最后修改时间戳。

示例

const stat = await minioClient.statObject('mybucket', 'photo.jpg')
console.log(stat)

对象版本上的示例 stat

const stat = await minioClient.statObject('mybucket', 'photo.jpg', { versionId: 'my-versionId' })
console.log(stat)

removeObject(bucketName, objectName [, removeOpts])

删除对象。

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

objectName

字符串

对象的名称。

removeOpts

object

对象的版本,格式为 {versionId:"my-versionId", governanceBypass: true or false }。默认值为 {}。(可选)

示例 1

;(async function () {
  await minioClient.removeObject('mybucket', 'photo.jpg')
  console.log('Removed the object')
})()

示例 2 删除对象的特定版本

;(async function () {
  try {
    await minioClient.removeObject('mybucket', 'photo.jpg', { versionId: 'my-versionId' })
    console.log('Removed the object')
  } catch (err) {
    console.log('Unable to remove object', err)
  }
})()

示例 3 使用 governanceBypass 删除选项删除使用保留模式 GOVERNANCE 锁定的对象版本

;(async function () {
  await s3Client.removeObject('my-bucketname', 'my-objectname', { versionId: 'my-versionId', governanceBypass: true })
  console.log('Success')
})()

removeObjects(bucketName, objectsList)

删除 objectsList 中的所有对象。

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

objectsList

object

要删除的存储桶中的对象列表。任何一种格式:1. 对象名称列表,作为字符串数组,即对象键:['objectname1','objectname2'] 2. 对象名称和 VersionId 列表,作为对象:[{name:”my-obj-name”,versionId:”my-versionId”}]

示例

const objectsList = []

// List all object paths in bucket my-bucketname.
const objectsStream = s3Client.listObjects('my-bucketname', 'my-prefixname', true)

objectsStream.on('data', function (obj) {
  objectsList.push(obj.name)
})

objectsStream.on('error', function (e) {
  console.log(e)
})

objectsStream.on('end', async () => {
  await s3Client.removeObjects(bucket, objectsList)
})

示例 1

支持版本控制

const objectsList = []
const bucket = 'my-bucket'
const prefix = 'my-prefix'
const recursive = false

const objectsStream = s3Client.listObjects(bucket, prefix, recursive, { IncludeVersion: true })
objectsStream.on('data', function (obj) {
  objectsList.push(obj)
})
objectsStream.on('error', function (e) {
  return console.log(e)
})
objectsStream.on('end', async () => {
  await s3Client.removeObjects(bucket, objectsList)
})

removeIncompleteUpload(bucketName, objectName)

删除部分上传的对象。

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

objectName

字符串

对象的名称。

示例

await minioClient.removeIncompleteUpload('mybucket', 'photo.jpg')

async putObjectRetention(bucketName, objectName [, retentionOpts])

对对象应用保留策略。

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

objectName

字符串

对象的名称。

retentionOpts

object

保留策略选项,例如:{ governanceBypass:true/false ,mode:COMPLIANCE/GOVERNANCE, retainUntilDate: _date_ , versionId:"my-versionId" } 默认值为 {}(可选)

示例 对对象应用对象保留策略

const bucketName = 'my-bucket'
const objectName = 'my-object'

const expirationDate = new Date()
expirationDate.setDate(expirationDate.getDate() + 1)
expirationDate.setUTCHours(0, 0, 0, 0) //Should be start of the day.(midnight)
const versionId = 'e67b4b08-144d-4fc4-ba15-43c3f7f9ba74'

await minioClient.putObjectRetention(bucketName, objectName, {
  Mode: 'GOVERNANCE',
  retainUntilDate: retainUntilDate.toISOString(),
  versionId: versionId,
})

getObjectRetention(bucketName, objectName [, getOpts])

获取对象的保留策略配置

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

objectName

字符串

对象的名称。

getOpts

object

保留策略选项,例如:{ versionId:"my-versionId" } 默认值为 {}(可选)

示例 1

const retentionInfo = await minioClient.getObjectRetention('bucketname', 'objectname')
console.log(retentionInfo)

示例 2

const retInfoForVersionId = await minioClient.getObjectRetention('bucketname', 'objectname', {
  versionId: 'my-versionId',
})
console.log(retInfoForVersionId)

setObjectTagging(bucketName, objectName, tags[, putOpts])

对对象添加标签

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

objectName

字符串

对象的名称。

tags

object

标签映射配置,例如:{<tag-key-1>:<tag-value-1>}

putOpts

object

默认值为 {}。例如 {versionId:"my-version-id"}。(可选)

示例

await minioClient.setObjectTagging('bucketname', 'object-name', tags)

示例 1 对对象的版本添加标签。

await minioClient.setObjectTagging('bucketname', 'object-name', tags, { versionId: 'my-version-id' })

removeObjectTagging(bucketName, objectName[, removeOpts])

删除对象的标签

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

objectName

字符串

对象的名称。

removeOpts

object

默认值为 {}。例如 {versionId:"my-version-id"}。(可选)

示例

await minioClient.removeObjectTagging('bucketname', 'object-name')

示例 1 删除对象的版本的标签。

await minioClient.removeObjectTagging('bucketname', 'object-name', { versionId: 'my-object-version-id' })

getObjectTagging(bucketName, objectName[, getOpts])

获取对象的标签

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

objectName

字符串

对象的名称。

getOpts

object

默认值为 {}。例如 {versionId:"my-version-id"}。(可选)

示例

console.log(await minioClient.getObjectTagging('bucketname', 'object-name'))

示例 1 获取对象的版本的标签。

console.log(await minioClient.getObjectTagging('bucketname', 'object-name', { versionId: 'my-object-version-id' }))

getObjectLegalHold(bucketName, objectName, getOpts)

获取对象的法律保留策略。

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

objectName

字符串

对象的名称。

getOpts

object

法律保留策略配置选项。例如 {versionId:'my-version-uuid'}。默认值为 {}

示例 1

获取对象的法律保留策略。

const legalholdStatus = await minioClient.getObjectLegalHold('bucketName', 'objectName')

示例 2

获取具有 versionId 的对象的法律保留策略。

const legalholdStatus = await minioClient.getObjectLegalHold('bucketName', 'objectName', {
  versionId: 'my-obj-version-uuid',
})

setObjectLegalHold(bucketName, objectName, [,setOpts])

对对象设置法律保留策略。

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

objectName

字符串

对象的名称。

setOpts

object

要设置的法律保留策略配置选项。例如 {versionId:'my-version-uuid', status:'ON or OFF'}。如果未传递,则默认值为 {status:'ON'}

示例 1

设置对象的法律保留策略。

const legalholdStatus = await minioClient.setObjectLegalHold('bucketName', 'objectName', { Status: 'ON' })

示例 2

设置具有 versionId 的对象的法律保留策略。

const legalholdStatus = await minioClient.setObjectLegalHold('bucketName', 'objectName', {
  Status: 'ON',
  versionId: 'my-obj-version-uuid',
})

composeObject(destObjConfig, sourceObjectList)

从多个部分组合一个对象

参数

参数

类型

描述

destObjConfig

object

目标对象的配置,类型为 CopyDestinationOptions

sourceObjectList

object[]

要组合成对象的源对象(部分)数组。每个部分的配置应为 CopySourceOptions 类型

示例 1

从其部分组合一个对象。

import * as minio from 'minio'

const sourceList = [
  new minio.CopySourceOptions({
    Bucket: 'source-bucket',
    Object: 'parta',
  }),
  new minio.CopySourceOptions({
    Bucket: 'source-bucket',
    Object: 'partb',
  }),
  new minio.CopySourceOptions({
    Bucket: 'source-bucket',
    Object: 'partc',
  }),
  new minio.CopySourceOptions({
    Bucket: 'source-bucket',
    Object: 'partd',
  }),
]

const destOption = new minio.CopyDestinationOptions({
  Bucket: 'dest-bucket',
  Object: '100MB.zip',
})

//using Promise style.
await minioClient.composeObject(destOption, sourceList)

selectObjectContent(bucketName, objectName, selectOpts)

选择对象的內容(S3 Select)。

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

objectName

字符串

对象的名称。

selectOpts

object

示例 1 选择所有值

const selectOpts = {
  expression: 'SELECT * FROM s3object s where s."Name" = \'Jane\'',
  expressionType: 'SQL',
  inputSerialization: {
    CSV: { FileHeaderInfo: 'Use', RecordDelimiter: '\n', FieldDelimiter: ',' },
    CompressionType: 'NONE',
  },
  outputSerialization: { CSV: { RecordDelimiter: '\n', FieldDelimiter: ',' } },
  requestProgress: { Enabled: true },
}

const res = await minioClient.selectObjectContent('bucketName', 'objectName', selectOpts)
console.log(res)

4. 预签署操作

预签署 URL 用于临时下载/上传对私有对象的访问。

presignedUrl(httpMethod, bucketName, objectName[, expiry, reqParams, requestDate])

为提供的 HTTP 方法“httpMethod”生成一个预签署 URL。即使存储桶是私有的,浏览器/移动客户端也可以指向此 URL 来直接下载对象。此预签署 URL 可以具有关联的过期时间(以秒为单位),在此时间之后 URL 将不再有效。默认值为 7 天。

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

objectName

字符串

对象的名称。

expiry

数字

过期时间(以秒为单位)。默认值为 7 天。(可选)

reqParams

object

请求参数。(可选)例如 {versionId:”10fa9946-3f64-4137-a58f-888065c0732e”}

requestDate

日期

日期对象,URL 将在此日期发出。默认值为现在。(可选)

示例 1

// presigned url for 'getObject' method.
// expires in a day.
const presignedUrl = await minioClient.presignedUrl('GET', 'mybucket', 'hello.txt', 24 * 60 * 60)
console.log(presignedUrl)

示例 2

// presigned url for 'listObject' method.
// Lists objects in 'myBucket' with prefix 'data'.
// Lists max 1000 of them.
await minioClient.presignedUrl('GET', 'mybucket', '', 1000, { prefix: 'data', 'max-keys': 1000 })

示例 3

// Get Object with versionid
await minioClient.presignedUrl('GET', 'mybucket', '', 1000, { versionId: '10fa9946-3f64-4137-a58f-888065c0732e' })

presignedGetObject(bucketName, objectName[, expiry, respHeaders, requestDate])

为 HTTP GET 操作生成预签署 URL。即使存储桶是私有的,浏览器/移动客户端也可以指向此 URL 来直接下载对象。此预签署 URL 可以具有关联的过期时间(以秒为单位),在此时间之后 URL 将不再有效。默认值为 7 天。

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

objectName

字符串

对象的名称。

expiry

数字

过期时间(以秒为单位)。默认值为 7 天。(可选)

respHeaders

object

要覆盖的响应头(可选)

requestDate

日期

日期对象,URL 将在此日期发出。默认值为现在。(可选)

示例

// expires in a day.
const presignedUrl = await minioClient.presignedGetObject('mybucket', 'hello.txt', 24 * 60 * 60)
console.log(presignedUrl)

presignedPutObject(bucketName, objectName [,expiry])

为 HTTP PUT 操作生成预签署 URL。即使存储桶是私有的,浏览器/移动客户端也可以指向此 URL 将对象直接上传到存储桶。此预签署 URL 可以具有关联的过期时间(以秒为单位),在此时间之后 URL 将不再有效。默认值为 7 天。

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

objectName

字符串

对象的名称。

expiry

数字

过期时间(以秒为单位)。默认值为 7 天。

示例

// expires in a day.
const presignedUrl = await minioClient.presignedPutObject('mybucket', 'hello.txt', 24 * 60 * 60)
console.log(presignedUrl)

presignedPostPolicy(policy)

允许将策略条件设置为 POST 操作的预签署 URL。可以设置策略,例如接收对象上传的存储桶名称、键名称前缀、过期策略等。

参数

参数

类型

描述

policy

object

由 minioClient.newPostPolicy() 创建的策略对象

创建策略

const policy = minioClient.newPostPolicy()

应用上传策略限制

// Policy restricted only for bucket 'mybucket'.
policy.setBucket('mybucket')

// Policy restricted only for hello.txt object.
policy.setKey('hello.txt')

// Policy restricted for incoming objects with keyPrefix.
policy.setKeyStartsWith('keyPrefix')

const expires = new Date()
expires.setSeconds(24 * 60 * 60 * 10)
// Policy expires in 10 days.
policy.setExpires(expires)

// Only allow 'text'.
policy.setContentType('text/plain')

// Set content disposition response header.
policy.setContentDisposition('attachment; filename=text.txt')

// Only allow content size in range 1KB to 1MB.
policy.setContentLengthRange(1024, 1024 * 1024)

// Set key-value user defined metadata
policy.setUserMetaData({
  key: 'value',
})

使用 superagent 从浏览器 POST 您的内容

const { postURL, formData } = await minioClient.presignedPostPolicy(policy)
const req = superagent.post(postURL)
_.each(formData, function (value, key) {
  req.field(key, value)
})

// file contents.
req.attach('file', '/path/to/hello.txt', 'hello.txt')

req.end(function (err, res) {
  if (err) {
    return console.log(err.toString())
  }
  console.log('Upload successful.')
})

5. 存储桶策略和通知操作

存储桶被配置为在指定的事件类型和路径过滤器上触发通知。

getBucketNotification(bucketName[, cb])

获取存储在 S3 提供商中且属于指定存储桶名称的通知配置。

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

callback(err, bucketNotificationConfig)

function

如果出现错误,回调函数将使用非null的 err 值调用。 bucketNotificationConfig 将是包含与 bucketName 相关联的所有通知配置的对象。 如果未传递回调,则返回一个Promise

示例

minioClient.getBucketNotification('mybucket', function (err, bucketNotificationConfig) {
  if (err) return console.log(err)
  console.log(bucketNotificationConfig)
})

setBucketNotification(bucketName, bucketNotificationConfig[, callback])

上传用户创建的通知配置并将其关联到指定的存储桶名称。

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

bucketNotificationConfig

BucketNotification

包含通知配置的 Javascript 对象。

callback(err)

function

如果出现错误,回调函数将使用非null的 err 值调用。 如果未传递回调,则返回一个Promise

示例

// Create a new notification object
const bucketNotification = new Minio.NotificationConfig()

// Setup a new Queue configuration
const arn = Minio.buildARN('aws', 'sqs', 'us-west-2', '1', 'webhook')
const queue = new Minio.QueueConfig(arn)
queue.addFilterSuffix('.jpg')
queue.addFilterPrefix('myphotos/')
queue.addEvent(Minio.ObjectReducedRedundancyLostObject)
queue.addEvent(Minio.ObjectCreatedAll)

// Add the queue to the overall notification object
bucketNotification.add(queue)

minioClient.setBucketNotification('mybucket', bucketNotification, function (err) {
  if (err) return console.log(err)
  console.log('Success')
})

removeAllBucketNotification(bucketName[, callback])

删除与指定存储桶关联的存储桶通知配置。

参数

参数

类型

描述

bucketName

字符串

存储桶的名称

callback(err)

function

如果出现错误,回调函数将使用非null的 err 值调用。 如果未传递回调,则返回一个Promise

minioClient.removeAllBucketNotification('my-bucketname', function (e) {
  if (e) {
    return console.log(e)
  }
  console.log('True')
})

listenBucketNotification(bucketName, prefix, suffix, events)

监听存储桶上的通知。 此外,还可以为前缀、后缀和事件提供过滤器。 使用此 API 不需要事先设置存储桶通知。 这是一个 MinIO 扩展 API,其中唯一标识符由服务器根据传入请求自动注册和注销。

返回一个EventEmitter,它将发出一个notification 事件,该事件包含记录。

要停止监听,请在返回的EventEmitter 上调用.stop()

参数

参数

类型

描述

bucketName

字符串

存储桶的名称

prefix

字符串

对象键前缀,用于过滤通知。

suffix

字符串

对象键后缀,用于过滤通知。

events

Array

为特定事件类型启用通知。

有关完整示例,请参阅这里

const listener = minioClient.listenBucketNotification('my-bucketname', 'photos/', '.jpg', ['s3:ObjectCreated:*'])
listener.on('notification', function (record) {
  // For example: 's3:ObjectCreated:Put event occurred (2016-08-23T18:26:07.214Z)'
  console.log('%s event occurred (%s)', record.eventName, record.eventTime)
  listener.stop()
})

async getBucketPolicy(bucketName: string): Promise

获取与指定存储桶关联的存储桶策略。 如果objectPrefix 不为空,则存储桶策略也将根据对象权限进行过滤。

参数

参数

类型

描述

bucketName

字符串

存储桶的名称

// Retrieve bucket policy of 'my-bucketname'
const policy = await minioClient.getBucketPolicy('my-bucketname')

console.log(`Bucket policy file: ${policy}`)

async setBucketPolicy(bucketName, bucketPolicy): Promise

在指定的存储桶上设置存储桶策略。 bucketPolicy 在此处有详细说明。

参数

参数

类型

描述

bucketName

字符串

存储桶的名称。

bucketPolicy

字符串

存储桶策略。

// Set the bucket policy of `my-bucketname`
await minioClient.setBucketPolicy('my-bucketname', JSON.stringify(policy))

6. 自定义设置

setS3TransferAccelerate(endpoint)

为所有后续 API 请求设置 AWS S3 传输加速端点。 注意:此 API 仅适用于 AWS S3,对于 S3 兼容的对象存储服务来说是无操作的。

参数

参数

类型

描述

endpoint

字符串

设置为新的 S3 传输加速端点。

7. HTTP 请求选项

setRequestOptions(options)

设置 HTTP/HTTPS 请求选项。 支持的选项为agent (http.Agent())、family (解析hosthostname 时要使用的 IP 地址族) 以及此处记录的与 TLS 相关的选项(‘agent’、‘ca’、‘cert’、‘ciphers’、‘clientCertEngine’、‘crl’、‘dhparam’、‘ecdhCurve’、‘honorCipherOrder’、‘key’、‘passphrase’、‘pfx’、‘rejectUnauthorized’、‘secureOptions’、‘secureProtocol’、‘servername’、‘sessionIdContext’)此处

// Do not reject self signed certificates.
minioClient.setRequestOptions({ rejectUnauthorized: false })

7. 进一步探索