pre-signed-url · L4

MinIO SDK 產 GET/PUT URL

用 MinIO SDK 產 GET/PUT URL

一句話:MinIO 官方 .NET SDK 用 PresignedGetObjectAsync(下載)和 PresignedPutObjectAsync(上傳)產 URL——但寫法會隨 SDK 版本改變,動手前務必先看你 NuGet 鎖的是哪版。

NuGet 套件:Minio

版本差很大,這是最大的坑。 現行 v7 原始碼:presigned 方法吃位置參數、expiry 是 TimeSpan、回傳 Uri;而 6.x(與許多舊教學)用 PresignedGetObjectArgsbuilder 寫法、expiry 給 int 秒數、回傳 string。兩者不能互抄。

v7 寫法(TimeSpan、回 Uri)

var minio = new MinioClientBuilder("http://localhost:9000")
    .WithStaticCredentials("accessKey", "secretKey")
    .Build();

// GET:下載連結,有效 15 分鐘
Uri url = await minio.PresignedGetObjectAsync(
    "my-bucket", "photo.jpg", TimeSpan.FromMinutes(15));

// PUT:上傳連結,有效 10 分鐘
Uri uploadUrl = await minio.PresignedPutObjectAsync(
    "my-bucket", "uploads/photo.jpg", TimeSpan.FromMinutes(10));

注意回傳是 Uri 不是 string——用 string url = await ... 會編不過,要 .ToString() 或直接接 Uri

6.x / builder 寫法(int 秒、回 string)

var args = new PresignedGetObjectArgs()
    .WithBucket("my-bucket")
    .WithObject("photo.jpg")
    .WithExpiry(60 * 15);              // 秒數!15 分鐘 = 900
string url = await minio.PresignedGetObjectAsync(args);

跟 AWS SDK 的最大差別

AWS SDKMinIO SDK v7
期限型別DateTime(絕對時間點)TimeSpan(一段長度)
切 GET/PUTVerb換方法名
回傳stringUri

產出的 URL 本身是一模一樣的標準 SigV4——MinIO SDK 產的拿去打真 S3 也認得。

參考來源