以下是使用 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)来上传文件
  • 对上传的文件进行验证和过滤,以防止恶意攻击
Go 语言使用 MinIO 上传图片文件 - 实用示例

原文地址: https://www.cveoy.top/t/topic/lHRX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录