跳转到主要内容

mc share upload

语法

mc share upload 命令会生成一个临时的预签名 URL,并集成用于将对象上传到 MinIO 存储桶的访问凭证。该临时 URL 会在可配置的时间限制后过期。

应用程序使用生成的策略字段,通过 multipart 表单 POST 上传对象。

有关可共享对象 URL 的更多信息,请参阅 Amazon S3 文档中的 Pre-Signed URLs。

以下命令会为 myminio MinIO 部署上的 mydata 存储桶生成一个新的预签名上传 URL:

mc share upload --recursive myminio/mydata

该命令的语法如下:

mc [GLOBALFLAGS] share upload               \
                 [--content-type "string"]  \
                 [--expire "string"]        \
                 [--recursive]              \
                 ALIAS
  • 方括号 [] 表示可选参数。
  • 同一行中的参数彼此相互依赖。
  • 使用管道符 | 分隔的参数彼此互斥。

请先将示例复制到文本编辑器中并按需修改,再在终端 / shell 中运行命令。

参数

ALIAS

mc-cmd

Required MinIO 部署的 alias 以及要为其生成上传 URL 的对象完整路径。例如:

mc share upload play/mybucket/object.txt

你可以在同一个或不同的 MinIO 部署上指定多个对象。例如:

mc share upload play/mybucket/object.txt play/mybucket/otherobject.txt

如果指定的是存储桶路径或存储桶前缀路径,则你 必须 同时指定 --recursive 参数。例如:

mc share upload --recursive play/mybucket/

mc share upload --recursive play/mybucket/myprefix/
--content-type, T

mc-cmd

Optional 将上传限制为仅接受带有特定 Content-Type 头的请求。

指定一个字符串作为可接受的 Content-Type 值。 例如,video/mp4。

配置后,使用该生成 URL 的客户端必须包含指定类型的 Content-Type 头。 MinIO 会拒绝未携带正确 Content-Type 头的请求。

Content types 也称为 media types。

--expire, E

mc-cmd

Optional 为所有生成的 URL 设置过期时限。

指定格式为 ##h##m##s 的字符串。例如: 12h34m56s 表示在 URL 生成后 12 小时 34 分 56 秒过期。

默认值为 168h,即 168 小时(7 天)。

--recursive, r

mc-cmd

Optional 修改 CURL URL 以支持将对象上传到存储桶或存储桶前缀。 如果任意 ALIAS 指定的是存储桶路径或存储桶前缀路径,则该选项为必需。修改后的 CURL 输出如下所示:

curl 'https://silo.example.com/mybucket/' ... --form-string 'key=<NAME>' --form 'file=@<FILE>'

将 <FILE> 替换为要上传的文件路径。

将 <NAME> 替换为上传后的对象名称。 该名称可以包含 prefixes。

全局参数

此命令支持 全局标志 中的任意选项。

示例

生成用于上传对象的 URL

使用 mc share upload 生成一个支持 POST 请求的 URL, 用于将文件上传到 MinIO 部署上的特定对象位置:

mc share upload --expire DURATION ALIAS/PATH
  • 将 ALIAS 替换为 MinIO 部署的 alias。
  • 将 PATH 替换为 MinIO 部署中对象的路径。
  • 将 DURATION 替换为 URL 过期前的时长。 例如,要设置 30 天过期时间,指定 30d。

使用 mc share upload 并结合 --recursive 与 --expire 选项,生成一个临时 URL, 该 URL 支持 POST 请求,用于将文件上传到 MinIO 部署上的存储桶:

mc share upload --recursive --expire DURATION ALIAS/PATH
  • 将 ALIAS 替换为 MinIO 部署的 alias。
  • 将 PATH 替换为 MinIO 部署中的存储桶或存储桶前缀路径。
  • 将 DURATION 替换为 URL 过期前的时长。 例如,要设置 30 天过期时间,指定 30d。

该命令会返回一个用于向指定存储桶前缀上传对象的 CURL 命令。

  • 将返回的 CURL 命令中的 <FILE> 字符串替换为要上传的文件路径。
  • 将返回的 CURL 命令中的 <NAME> 字符串替换为存储桶中的对象名称。 该名称可以包含 prefixes。

你可以使用 shell 脚本循环将文件系统目录中的内容递归上传到兼容 S3 的服务:

#!/bin/sh

for file in "$HOME"/Documents/photos/*
do
   [ -f "$file" ] || continue
   curl 'https://silo.example.com/mybucket/' \
   --form-string 'policy=AAAAA' \
   --form-string 'x-amz-algorithm=AWS4-HMAC-SHA256' \
   --form-string 'x-amz-credential=AAAA/us-east-1/s3/aws4_request' \
   --form-string 'x-amz-date=20200812T202556Z' \
   --form-string 'x-amz-signature=AAAA' \
   --form-string 'bucket=mybucket' \
   --form-string "key=photos/${file##*/}" --form "file=@${file}"
done

此示例会将 ~/Documents/photos/ 目录中的每个文件上传到 mybucket 存储桶下的 photos 前缀。 对于如何遍历目录中的文件,请遵循你所选脚本语言文档中的最佳实践。

行为

生成命令与 shell 兼容性

自 mcli 20261109(见兼容性说明)起,生成的命令会按 POSIX shell 语法引用完整参数,文本字段使用 --form-string。替换 <FILE> 和 <NAME> 时保留这些引号;替换值自身含引号时也需要正确转义。若编辑后的命令保存在 upload 变量中,使用 sh -c "$upload" 执行。直接执行 $upload 只会分词,不会解释其中的引号,可能导致失败。Windows 上应在 Git Bash 或 WSL 中执行;输出不是 cmd.exe 语法。

上面的循环直接向 curl 传递各个参数。使用时将端点和示例策略字段替换成当前生成命令中的值;示例凭证与签名只是占位内容。

S3 兼容性

PGSTY mcli 正式支持的服务端是 SILO;对上游 MinIO 和其他 S3 服务的兼容属于尽最大努力。