一句話:MinIO 官方 .NET SDK 用 PresignedGetObjectAsync(下載)和 PresignedPutObjectAsync(上傳)產 URL——但寫法會隨 SDK 版本改變,動手前務必先看你 NuGet 鎖的是哪版。
NuGet 套件:Minio。
版本差很大,這是最大的坑。 現行 v7 原始碼:presigned 方法吃位置參數、expiry 是TimeSpan、回傳Uri;而 6.x(與許多舊教學)用PresignedGetObjectArgs的 builder 寫法、expiry 給int秒數、回傳string。兩者不能互抄。
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。
var args = new PresignedGetObjectArgs()
.WithBucket("my-bucket")
.WithObject("photo.jpg")
.WithExpiry(60 * 15); // 秒數!15 分鐘 = 900
string url = await minio.PresignedGetObjectAsync(args);
| AWS SDK | MinIO SDK v7 | |
|---|---|---|
| 期限型別 | DateTime(絕對時間點) | TimeSpan(一段長度) |
| 切 GET/PUT | 設 Verb | 換方法名 |
| 回傳 | string | Uri |
產出的 URL 本身是一模一樣的標準 SigV4——MinIO SDK 產的拿去打真 S3 也認得。