方式一:
func UpLoadFile( c *gin.Context) {
file, err := c.FormFile("filename")
if err != nil {
c.String(http.StatusBadRequest, fmt.Sprintf("get form err: %s", err.Error()))
return
}
file.Filename = "copy_" + file.Filename
if err := c.SaveUploadedFile(file, file.Filename); err != nil {
c.String(http.StatusBadRequest, fmt.Sprintf("upload file err: %s", err.Error()))
return
}
c.String(http.StatusOK, fmt.Sprintf("File %s uploaded success", file.Filename )
}
方法二:
// 接收client上传的文件
// 从FormFile中获取相关的文件data!
// 然后写入本地文件
func upload(c *gin.Context) {
// 注意此处的文件名和client处的应该是一样的
file, header, err := c.Request.FormFile("uploadFile")
filename := header.Filename
fmt.Println(header.Filename)
// 创建临时接收文件
out, err := os.Create("copy_" + filename)
if err != nil {
log.Fatal(err)
}
defer out.Close()
// Copy数据
_, err = io.Copy(out, file)
if err != nil {
log.Fatal(err)
}
c.String(http.StatusOK, "upload file success")
}
方法三:多文件上传
func upload(c *gin.Context) {
// Multipart form
form, err := c.MultipartForm()
if err != nil {
c.String(http.StatusBadRequest, fmt.Sprintf("get form err: %s", err.Error()))
return
}
files := form.File["files"]
for _, file := range files {
if err := c.SaveUploadedFile(file, file.Filename); err != nil {
c.String(http.StatusBadRequest, fmt.Sprintf("upload file err: %s", err.Error()))
return
}
}
c.String(http.StatusOK, fmt.Sprintf("Uploaded successfully %d files ", len(files)))
}