Go 语言使用 MinIO 上传图片文件 - 实用示例
以下是使用 Go 语言实现表单上传图片文件并将其上传到 MinIO 的示例代码:
package main
import (
"fmt"
"io"
"net/http"
"os"
"github.com/minio/minio-go/v7"
)
func main() {
endpoint := "localhost:9000"
accessKeyID := "minioadmin"
secretAccessKey := "minioadmin"
useSSL := false
bucketName := "test-bucket"
// 初始化 MinIO 客户端
minioClient, err := minio.New(endpoint, &minio.Options{
Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
Secure: useSSL,
})
if err != nil {
fmt.Println(err)
return
}
// 创建一个 HTTP 服务器并监听 8080 端口
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
if r.Method == "POST" {
// 解析表单数据中的文件
file, header, err := r.FormFile("file")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
// 在 MinIO 中创建一个新的对象
objectName := header.Filename
_, err = minioClient.PutObject(context.Background(), bucketName, objectName, file, -1, minio.PutObjectOptions{})
if err != nil {
fmt.Println(err)
return
}
fmt.Fprintf(w, "File 's uploaded successfully\n", objectName)
} else {
// 返回一个简单的 HTML 表单页面
fmt.Fprintf(w, `
<html>
<body>
<form enctype='multipart/form-data' method='post'>
<input type='file' name='file' />
<input type='submit' value='Upload' />
</form>
</body>
</html>
`)
}
})
http.ListenAndServe(":8080", nil)
}
在上面的代码中,我们使用 minio-go 库来连接到 MinIO 服务器,创建一个新的对象,并将文件内容上传到该对象。我们还创建了一个简单的 HTTP 服务器,以便用户可以通过表单上传文件。在 HTTP POST 请求中,我们读取表单数据中的文件并将其上传到 MinIO 中。如果上传成功,我们返回一个成功消息。在 HTTP GET 请求中,我们返回一个简单的 HTML 表单页面,用户可以使用它来上传文件。
请注意,上面的示例代码仅用于演示目的,并未包含错误处理和安全性措施。在实际应用中,您应该对表单数据进行验证和过滤,以确保安全性和可靠性。
最佳实践:
- 使用
context.Background()确保代码的正确性 - 使用
defer file.Close()确保文件资源的正确关闭 - 避免使用硬编码的凭据,最好使用环境变量或配置管理工具
- 添加错误处理和日志记录
- 考虑使用更安全的 HTTP 方法(例如
POST)来上传文件 - 对上传的文件进行验证和过滤,以防止恶意攻击
原文地址: https://www.cveoy.top/t/topic/lHRX 著作权归作者所有。请勿转载和采集!