当前位置: 首页 > wzjs >正文

合肥小程序开发整站seo技术

合肥小程序开发,整站seo技术,wordpress 主题 mip,德阳做网站文件上传和下载 1.文件上传 1.1单文件上传 在 Gin 中处理单文件上传,可以使用 c.FormFile 方法获取上传的文件,然后使用 c.SaveUploadedFile 方法保存文件。 package mainimport ("github.com/gin-gonic/gin""log" )func main()…

文件上传和下载

1.文件上传

1.1单文件上传

在 Gin 中处理单文件上传,可以使用 c.FormFile 方法获取上传的文件,然后使用 c.SaveUploadedFile 方法保存文件。

package mainimport ("github.com/gin-gonic/gin""log"
)func main() {r := gin.Default()r.POST("/upload", func(c *gin.Context) {// 获取名为 "file" 的上传文件file, err := c.FormFile("file")if err != nil {c.JSON(400, gin.H{"error": err.Error()})return}// 保存上传的文件if err := c.SaveUploadedFile(file, file.Filename); err != nil {log.Println("Failed to save file:", err)c.JSON(500, gin.H{"error": "Failed to save file"})return}c.JSON(200, gin.H{"message":  "File uploaded successfully","filename": file.Filename,})})r.Run(":8080")
}

我们使用postman来提交,http://localhost:8080/upload
在这里插入图片描述

1.2多文件上传

处理多文件上传时,可以使用 c.MultipartForm 方法获取所有上传的文件。

package mainimport ("github.com/gin-gonic/gin""log"
)func main() {r := gin.Default()r.POST("/multi-upload", func(c *gin.Context) {// 获取所有上传的文件form, err := c.MultipartForm()if err != nil {c.JSON(400, gin.H{"error": err.Error()})return}files := form.File["files"]for _, file := range files {// 保存每个上传的文件if err := c.SaveUploadedFile(file, file.Filename); err != nil {log.Println("Failed to save file:", err)c.JSON(500, gin.H{"error": "Failed to save file"})return}}c.JSON(200, gin.H{"message": "Files uploaded successfully","count":   len(files),})})r.Run(":8080")
}

使用postman测试,http://localhost:8080/multi-upload
在这里插入图片描述

1.3 限制上传文件大小

Gin 默认允许上传 32 MiB 的文件,可通过 router.MaxMultipartMemory 调整:

package mainimport ("fmt""github.com/gin-gonic/gin""log""net/http""path/filepath""strings"
)func main() {r := gin.Default()// 设置全局上传限制(可选)// 注意:Gin 默认的 MaxMultipartMemory 是 32 MiBr.MaxMultipartMemory = 10 << 20 // 10 MiBr.POST("/upload", func(c *gin.Context) {// 获取名为 "file" 的上传文件file, err := c.FormFile("file")// 校验文件大小(10MB = 10 * 1024 * 1024 bytes)maxSize := r.MaxMultipartMemoryif file.Size > maxSize {c.JSON(http.StatusRequestEntityTooLarge, gin.H{"error": fmt.Sprintf("文件大小超过限制(最大 %dMB)", maxSize/(1<<20)),})return}if err != nil {c.JSON(400, gin.H{"error": err.Error()})return}//r.MaxMultipartMemory = 1 << 20 // 1 MiB// 保存上传的文件if err := c.SaveUploadedFile(file, file.Filename); err != nil {log.Println("Failed to save file:", err)c.JSON(500, gin.H{"error": "保存文件失败"})return}c.JSON(200, gin.H{"message":  "File uploaded successfully","filename": file.Filename,})})r.Run(":8080")
}

1.4 限制上传文件类型

限制文件类型很简单,就是检测上传文件后缀 , 为了避免上传可执行文最好再校验MIME 类型

package mainimport ("fmt""github.com/gin-gonic/gin""log""net/http""path/filepath""strings"
)func isAllowedType(filename string) bool {allowed := map[string]bool{".jpg": true,".png": true,}ext := strings.ToLower(filepath.Ext(filename))return allowed[ext]
}func main() {r := gin.Default()// 设置全局上传限制(可选)// 注意:Gin 默认的 MaxMultipartMemory 是 32 MiBr.MaxMultipartMemory = 10 << 20 // 10 MiBr.POST("/upload", func(c *gin.Context) {// 获取名为 "file" 的上传文件file, err := c.FormFile("file")// 在接口中调用校验if !isAllowedType(file.Filename) {c.JSON(http.StatusBadRequest, gin.H{"error": "不支持的文件类型"})return}if err != nil {c.JSON(400, gin.H{"error": err.Error()})return}//r.MaxMultipartMemory = 1 << 20 // 1 MiB// 保存上传的文件if err := c.SaveUploadedFile(file, file.Filename); err != nil {log.Println("Failed to save file:", err)c.JSON(500, gin.H{"error": "保存文件失败"})return}c.JSON(200, gin.H{"message":  "File uploaded successfully","filename": file.Filename,})})r.Run(":8080")
}

1.5 避免上传文件名冲突

为了避免文件名冲突通常使用 UUID 或时间戳重命名,这里我们演示下 uuid

安装uuid库:

go get github.com/google/uuid

具体实现:

		//<pre>  // 生成唯一文件名</pre>newFilename := uuid.New().String() + filepath.Ext(file.Filename)if err := c.SaveUploadedFile(file, newFilename); err != nil {log.Println("Failed to save file:", err)c.JSON(500, gin.H{"error": "保存文件失败"})return}

2.文件下载

2.1 单文件下载

下载很简单,使用 c.File()即可,下面是演示代码:

package mainimport ("github.com/gin-gonic/gin""net/http""os"
)func main() {r := gin.Default()// 文件下载r.GET("/download/:filename", func(c *gin.Context) {filename := c.Param("filename")filePath := "./img/" + filenameif _, err := os.Stat(filePath); os.IsNotExist(err) {c.JSON(http.StatusNotFound, gin.H{"error": "文件不存在"})return}//c.Header("Content-Disposition", "attachment; filename="+filename)c.File(filePath)})r.Run(":8080")
}

2.2 设置浏览器头信息

如果你是用来图片文件,来测试上面的代码,你会发现浏览器是直接显示图片,而不是下载图片,所以我们需要使浏览器唤起下载行为。

通过 Content-Disposition 头强制浏览器下载文件(而非预览):

c.Header("Content-Type", "application/octet-stream") // 表示是文件流,唤起浏览器下载,一般设置了这个,就要设置文件名
c.Header("Content-Disposition", "attachment; filename="+filename)  用来指定下载下来的文件名
c.Header("Content-Transfer-Encoding", "binary") // 表示传输过程中的编码形式,乱码问题可能就是因为它
c.File(filePath)
http://www.dtcms.com/wzjs/287764.html

相关文章:

  • 哪个网站可以做空比特币教育培训网站大全
  • 好的做详情页的网站有哪些网址安全检测中心
  • 用搬瓦工做储存网站网站定制
  • 网站怎么做电脑系统下载文件网站注册查询
  • 网站开发与优化课程总结郑州抖音seo
  • 个人可以做下载类网站吗友情链接名词解释
  • 怎样做网站banner世界十大网站排名出炉
  • 天津招投标 天津建设工程信息网青岛seo网站排名
  • php如何做局域网的网站市场营销计划书模板
  • WordPress开启measo具体优化
  • 苏州网站建设方案策划网络广告营销典型案例
  • WordPress模板tob支付软件seo运营专员
  • Wordpress怎么做导航页seo学习网站
  • 慧聪网怎样做网站友情链接百度外链查询工具
  • 聚合页面网站什么时候做防疫优化措施
  • 网站宽度网站seo排名优化方法
  • 源码分享网站月入过万百度指数 移民
  • 北京网站软件制作舆情优化公司
  • 兼职开发网站开发seo培训学校
  • 商务网站营销推广方式淘宝权重查询
  • 天津低价做网站免费网站建站
  • 零基础源码建设网站免费的精准引流软件
  • 建设一个网站需要多久宁波seo营销
  • 网站推广软件价格东莞seo外包
  • 网站的设计站长之家素材
  • 网站建设需要哪些软件seo教程书籍
  • 青浦徐泾网站建设兰州seo技术优化排名公司
  • 广州做大型网站建设百度客户服务电话是多少
  • 在线做c语言题目的网站百度小说搜索热度排行榜
  • 服装外贸平台有哪些安卓aso优化排名