文件上传

单文件上传

  • 后端代码

    • 使用 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)
    }
    
posted @   巫小诗  阅读(72)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示