一、連接Minio伺服器
Minio是一個開源的S3兼容對象存儲系統。為了進行文件下載,我們需要連接到Minio伺服器。
首先,我們需要在代碼中設置Minio伺服器的地址、AccessKey和SecretKey:
import (
"github.com/minio/minio-go/v7"
"log"
"context"
)
func main() {
endpoint := "minio.example.com:9000"
accessKey := "ACCESS_KEY"
secretKey := "SECRET_KEY"
// Initialize minio client object.
minioClient, err := minio.New(endpoint, &minio.Options{
Credentials: &minio.Credentials{
AccessKey: accessKey,
SecretKey: secretKey,
}},
)
if err != nil {
log.Fatalln(err)
}
// Use the minioClient object to make calls to the API.
ctx := context.Background()
_, err = minioClient.ListBuckets(ctx)
if err != nil {
log.Fatalln(err)
}
}
以上代碼中,我們通過minio.New()函數創建了Minio客戶端對象,並在參數中傳入了伺服器地址、AccessKey和SecretKey。之後我們使用該對象進行其他操作,例如檢查連接是否正常。
二、獲取文件信息
在進行文件下載之前,我們需要獲取該文件的信息,例如文件名、文件大小等。
我們可以使用Minio的StatObject()函數來獲取文件信息:
func main() {
// ...
bucketName := "my-bucket"
objectName := "my-object"
// Get object information.
info, err := minioClient.StatObject(ctx, bucketName, objectName, minio.StatObjectOptions{})
if err != nil {
log.Fatalln(err)
}
fmt.Println(info)
}
三、下載文件
一旦我們獲取了文件信息,就可以開始下載文件。Minio庫提供了多種下載方式,下面介紹幾種最常用的下載方式。
1. 下載到本地文件
使用FGetObject()函數可以將文件下載到本地磁碟:
func main() {
// ...
bucketName := "my-bucket"
objectName := "my-object"
filePath := "my-object.txt"
// Download object to file.
err = minioClient.FGetObject(ctx, bucketName, objectName, filePath, minio.GetObjectOptions{})
if err != nil {
log.Fatalln(err)
}
}
以上代碼中,FGetObject()函數中的參數分別為:Bucket名稱、文件名、本地文件路徑和下載選項。下載選項可以用於指定文件的偏移量、位元組數等。
2. 下載到內存
如果不想將文件下載到本地磁碟,可以使用GetObject()函數將文件下載到內存中:
func main() {
// ...
bucketName := "my-bucket"
objectName := "my-object"
// Download object to buffer.
buf := bytes.NewBuffer(nil)
_, err = minioClient.GetObject(ctx, bucketName, objectName, minio.GetObjectOptions{}, buf)
if err != nil {
log.Fatalln(err)
}
fmt.Println(buf.String())
}
以上代碼中,GetObject()函數將文件下載到一個緩衝區中,並返回緩衝區的長度和錯誤信息。此時,可以通過buf.String()獲取文件的內容。
四、使用Presigned URL進行下載
如果需要將文件分享給其他人下載,可以使用Presigned URL。Presigned URL是具有時間限制的URL,可以讓外部人員在指定時間段內下載文件。
使用PresignedGetObject()函數可以生成Presigned URL:
func main() {
// ...
bucketName := "my-bucket"
objectName := "my-object"
expires := time.Second * 60 // URL有效期為1分鐘
// Generate presigned URL to download object.
url, err := minioClient.PresignedGetObject(ctx, bucketName, objectName, expires, nil)
if err != nil {
log.Fatalln(err)
}
fmt.Println(url)
}
以上代碼中,PresignedGetObject()函數中的參數分別為:Bucket名稱、文件名、URL有效期和一些可選參數,例如Response-Content-Disposition。
五、小結
通過以上幾種方式,我們可以輕鬆地實現Minio文件下載功能。無論是下載到本地磁碟還是下載到內存中,只需要調用相應的函數即可。如果需要將文件分享給其他人下載,Presigned URL是非常方便的選擇。
原創文章,作者:HMIBA,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/372858.html