1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| func upload(c echo.Context) error { file, err := c.FormFile("file") if err != nil { return util.JSONErr(c, err, "上传错误") } pathExt := path.Ext(file.Filename) acceptsImgExt := []interface{}{"jpg", "png", "jpeg", "webp"} acceptsVideoExt := []interface{}{"mov", "mp4", "avi"} acceptsOtherFileExt := []interface{}{"pdf", "zip", "rar", "gz", "txt"} folder := "" if inArray(acceptsImgExt, strings.Trim(pathExt, ".")) { folder = "image" } if inArray(acceptsVideoExt, strings.Trim(pathExt, ".")) { folder = "video" } if inArray(acceptsOtherFileExt, strings.Trim(pathExt, ".")) { folder = "file" } if folder == "" { return util.JSONErr(c, nil, "文件不合法") }
src, err := file.Open() if err != nil { return util.JSONErr(c, err, "打开文件失败") } defer src.Close()
dir, err := getDir("./static/upload/"+folder+"/", time.Now().Format("2006_01_02")) if err != nil { return util.JSONErr(c, err, "创建文件夹失败") }
randName := util.RandStringBytes(32) + pathExt fileName := filepath.Join(dir, randName)
dst, err := os.Create(fileName) if err != nil { return util.JSONErr(c, err, "创建文件失败") } defer dst.Close() if _, err = io.Copy(dst, src); err != nil { return util.JSONErr(c, err, "拷贝文件至目标失败") } return util.JSON(c, fmt.Sprintf("//%s/%s", c.Request().Host, fileName), "上传成功", 200) }
func getDir(path string, foderName string) (dir string, err error) { folder := filepath.Join(path, foderName) if _, err = os.Stat(folder); os.IsNotExist(err) { err = os.MkdirAll(folder, os.ModePerm) if err != nil { return } } dir = folder return }
func inArray(arr []interface{}, item interface{}) (inArr bool) { index := -1 for i, x := range arr { if item == x { index = i } } return index > -1 }
|