前端用户上传两个文件,一个名为cert,另一个为 key,后端使用 errgroup.Group 来处理。
package main
import (
"fmt"
"log"
"golang.org/x/sync/errgroup"
"github.com/gin-gonic/gin"
)
func GetSaveFile(file string) string {
return "file_" + file
}
func main() {
r := gin.Default()
v1 := r.Group("/api")
{
v1.POST("/v1/upload", UploadCert)
}
r.Run()
}
func UploadCert(c *gin.Context) {
var saveCertFile, saveKeyFile string
var eg errgroup.Group
eg.Go(func()error{
certFile, err := c.FormFile("cert")
if err != nil {
fmt.Errorf("cert upload: %s", err)
return err
}
// upload file
saveCertFile = GetSaveFile(certFile.Filename)
if err := c.SaveUploadedFile(certFile, saveCertFile); err != nil {
fmt.Errorf("cert move: %s", err)
return err
}
return nil
})
eg.Go(func()error{
certFile, err := c.FormFile("file")
if err != nil {
fmt.Errorf("key upload: %s", err)
return err
}
// upload file
saveKeyFile = GetSaveFile(certFile.Filename)
if err := c.SaveUploadedFile(certFile, saveKeyFile); err != nil {
fmt.Errorf("key move: %s", err)
return err
}
return nil
})
if err := eg.Wait(); err!= nil {
log.Fatal(err)
}
fmt.Println(saveCertFile, saveKeyFile)
}
异常错误
- unexpected EOF
而且每次的错误还不一样,如果弃用 errgroup.Group 用法,改为传统的顺序处理上传文件的话则完全正常。