文件上传
单文件上传
-
后端代码
- 使用
FormFile(key)
接收前端传的参数 - 使用
SaveUploadFile(句柄,目标地址)
// 生成文件名称 func generate_filename() string{ return strconv.FormatInt(time.Now().Unix(),10) } // 获取文件的后缀名 func file_ext(filename string) string { pos := strings.LastIndex(filename,".") return filename[pos:] } // 确认上传 func DoUpload(ctx *gin.Context){ file,_ := ctx.FormFile("pic") ext := file_ext(file.Filename) dist := "upload/" + generate_filename() + ext ctx.SaveUploadedFile(file,dist) ctx.String(http.StatusOK,"上传成功") }
- 使用
-
前端代码
{{define "user/upload.html"}} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>上传文件</title> </head> <body> <form action="/v4/upload" method="post" enctype="multipart/form-data"> 上传图片<input type="file" name="pic" /> <br> <input type="submit" value="提交"/> </form> </body> </html> {{end}}
-
路由代码
v4 := router.Group("/v4") { v4.POST("/upload",chapter4.DoUpload) }
多文件上传
-
后端代码
// 生成文件名称(时间戳) func generate_filename() string{ return strconv.FormatInt(time.Now().Unix(),10) + strconv.Itoa(rand.Intn(100000)) } // 获取文件的后缀名 func file_ext(filename string) string { pos := strings.LastIndex(filename,".") return filename[pos:] } // 文件上传 func UploadMoreView(ctx *gin.Context){ ctx.HTML(http.StatusOK,"upload/add.html",nil) } // 多文件上传 func Moreupload(ctx *gin.Context) { // 获取多文件的句柄 form,_ := ctx.MultipartForm() // 获取文件 files := form.File["pic"] // 循环写入 for _,file := range files{ ext := file_ext(file.Filename) filename := generate_filename() fmt.Println(file.Filename) ctx.SaveUploadedFile(file,"upload/"+filename+ext) } ctx.String(http.StatusOK,"上传成功") }
-
前段代码
{{define "upload/add.html"}} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>多文件上传案例</title> </head> <body> <form action="/v5/upload" method="post" enctype="multipart/form-data"> 上传图片:<input type="file" name="pic" multiple /> <input type="submit" value="提交"/> </form> </body> </html> {{end}}
-
路由代码
v5 := router.Group("/v5") { v5.GET("/add",chapter4.UploadMoreView) v5.POST("/upload",chapter4.Moreupload) }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端