一、环境介绍
Go版本:1.13.1
开发工具:IntelliJ IDEA 2019.2.3 x64
开发环境:windows10 64位
二、开始coding
1、前端页面代码
注意name=”datasetPath[]
<label>选择文件</label>
<input type="file" id="datasetPath" name="datasetPath[]" multiple />
<input type="submit" name="提交">
</form>
2、gin代码
func Uploadfile(c *gin.Context,dsId string)([]string, error){
form,_ := c.MultipartForm()
files := form.File["datasetPath[]"]
//var filePathMinio []string
// 切片类型(slice),默认长度为1,最大容量为20
filePathMinio := make([]string, 1, 20)
i := 0
for _,file := range files {
log.Println("upload file path: %s",file.Filename)
objectName := time.Now().Format("20060102") + "/" + dsId + "/" + file.Filename
err := util.UploadToMinio(objectName,file,"")
if err != nil{
return nil,errors.New("Failed upload file")
}
filePathMinio[i] = "http://" + _const.MINIO_ENDPOINT + "/" + _const.MINIO_BUCKETNAME + "/" + objectName
i = i + 1
}
return filePathMinio,nil
}
3、上传minio代码
入参objectName:文件在bucket上的路径,带文件名称
入参file:gin上下文获取到的文件列表中的一个文件
入参contentType:minio上传文件方式,可以为空
func UploadToMinio(objectName string,file *multipart.FileHeader,contentType string) error {
// 初使化 minio client对象
minioClient, err := minio.New(_const.MINIO_ENDPOINT, _const.MINIO_ACCESSKEYID, _const.MINIO_SECRETACCESSKEY, _const.MINIO_USESSL)
if err != nil {
return err
}
// 创建一个叫xxxx的存储桶
err = minioClient.MakeBucket(_const.MINIO_BUCKETNAME, _const.MINIO_LOCATION)
if err != nil {
// 检查存储桶是否已经存在。
exists, err := minioClient.BucketExists(_const.MINIO_BUCKETNAME)
if err == nil && exists {
log.Printf("Bucket:%s is already exist\n", _const.MINIO_BUCKETNAME)
} else {
return err
}
}
log.Printf("Successfully created bucket: %s\n", _const.MINIO_BUCKETNAME)
src, err1 := file.Open()
if err1 != nil {
return err1
}
defer src.Close()
// 使用PutObject上传一个zip文件
_, err2 := minioClient.PutObject(_const.MINIO_BUCKETNAME, objectName, src,-1, minio.PutObjectOptions{ContentType:contentType})
if err2 != nil {
return err2
}
return nil
}
这里使用minioClient.PutObject()方法上传,入参是file.Open()。
如果使用FPutObject()方法上传,入参就是文件路径。
可以在下面的地址找到API指导
https://docs.min.io/cn/golang-client-api-reference.html
版权声明:本文为reachyu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。