## 單文件上傳
```
import (
"fmt"
"github.com/gin-gonic/gin"
"psoriasis/common"
"math/rand"
"os"
"path"
"runtime"
"time"
)
func upload(){
file, err := c.FormFile("file")
if err != nil {
fmt.Println(err)
return
}
if file.Size > 1024 * 1024 *20 {
fmt.Println("上傳圖片大小不能超過20MB")
return
}
ext := path.Ext(file.Filename) // 文件后綴
rnd := rand.New(rand.NewSource(time.Now().UnixNano()))
// 文件名
filename := fmt.Sprintf("%06v", rnd.Int31n(1000000))
//驗證后綴名是否符合要求
var AllowExtMap = map[string]bool{
".jpg":true,
".jpeg":true,
".png":true,
}
if _,ok := AllowExtMap[ext];!ok{
fmt.Println("文件類型錯誤")
return
}
//創建目錄
uploadDir := "statics/uploads/images/" + time.Now().Format("2006/01/")
err = os.MkdirAll( uploadDir , 777)
if err != nil {
fmt.Println("沒有權限創建目錄")
return
}
filename := uploadDir + time.Now().Format("20060102150405") + filename + ext
// 保存文件
if err = c.SaveUploadedFile(file, filename); err != nil {
fmt.Println(err.Error())
return
}
imagePath := "http://127.0.0.1:8080"+filename
fmt.Println(imagePath)
}
```
## 多文件上傳
```go
form, _ := c.MultipartForm()
files := form.File["upload[]"]
for _, file := range files {
log.Println(file.Filename)
// 上傳文件至指定目錄
// c.SaveUploadedFile(file, filename)
}
```
## 七牛云上傳
```go
import (
"context"
"fmt"
"github.com/gin-gonic/gin"
"github.com/qiniu/api.v7/v7/auth/qbox"
"github.com/qiniu/api.v7/v7/storage"
"project/config"
"path"
)
func UploadFile(c *gin.Context){
file, _ := c.FormFile("file")
f, _ := file.Open()
fmt.Println(f)
//return
if file.Size > 1024 * 1024 *10 {
fmt.Printf("文件大小不能超過10M")
return
}
ext := path.Ext(file.Filename)
//驗證后綴名是否符合要求
var AllowExtMap = map[string]bool{
".jpg":true,
".jpeg":true,
".png":true,
}
if _,ok := AllowExtMap[ext];!ok{
fmt.Printf("文件類型錯誤")
return
}
putPolicy := storage.PutPolicy{
Scope: config.Bucket,
}
mac := qbox.NewMac(config.AccessKey, config.SecretKey)
upToken := putPolicy.UploadToken(mac)
cfg := storage.Config{}
// 空間對應的機房
cfg.Zone = &storage.ZoneHuanan
// 是否使用https域名
cfg.UseHTTPS = true
// 上傳是否使用CDN上傳加速
cfg.UseCdnDomains = false
// 構建表單上傳的對象
formUploader := storage.NewFormUploader(&cfg)
ret := storage.PutRet{}
// 可選配置
putExtra := storage.PutExtra{}
err := formUploader.PutWithoutKey(context.Background(), &ret, upToken, f, file.Size, &putExtra)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(ret.Key, ret.Hash)
}
```