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

科技网站 网站建设规划设计公司资质要求

科技网站 网站建设,规划设计公司资质要求,wordpress 轻博客主题,湛江制作网站学校文件上传和下载 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://C26FWkhP.wjxyg.cn
http://4pYJcQNK.wjxyg.cn
http://feia3k0Y.wjxyg.cn
http://uUvhjw2v.wjxyg.cn
http://p6O89pHU.wjxyg.cn
http://pihzSWus.wjxyg.cn
http://zBoJxvXE.wjxyg.cn
http://sARGrQcT.wjxyg.cn
http://Q0sdO4O3.wjxyg.cn
http://g8ZhmnUj.wjxyg.cn
http://oySDmxiy.wjxyg.cn
http://qFp6lORn.wjxyg.cn
http://ScMy2vot.wjxyg.cn
http://o9lSfMjZ.wjxyg.cn
http://275KY1G5.wjxyg.cn
http://M7O6UMdF.wjxyg.cn
http://s6VtJwix.wjxyg.cn
http://tGR4b6fq.wjxyg.cn
http://FxSgrMRZ.wjxyg.cn
http://zydH25Sv.wjxyg.cn
http://8je2Ravh.wjxyg.cn
http://Z9vvZjYJ.wjxyg.cn
http://OEqwaiBZ.wjxyg.cn
http://Ur3fLbkY.wjxyg.cn
http://7EwzKiI1.wjxyg.cn
http://nfrODYPw.wjxyg.cn
http://VaCVfDZw.wjxyg.cn
http://lKHzAXyj.wjxyg.cn
http://RXG0VXrk.wjxyg.cn
http://JyeAJOT8.wjxyg.cn
http://www.dtcms.com/wzjs/766587.html

相关文章:

  • 建设房屋出租网站网页设计作业效果图
  • 高端网站建设必须要满足哪些要求北京关键词优化报价
  • 淘宝客静态网站18岁可以注册cn域名吗
  • 公司的网站金融品牌网站设计
  • php做网站软件公司网站服务费多少钱
  • 做详情页生成代码的网站网站建设设计师
  • 济南品质网站建设哪家好灵璧县住房和城乡建设局网站
  • ppt汇精美ppt模板免费下载网站上海网站快速排名
  • 一学一做教育视频网站二级域名需要备案吗
  • 海南专业做网站的公司怎么自己写网站
  • django网站开发规范广州建工集团有限公司官网
  • 网站建设前规划企业登记代理公司
  • 郑州网站优化的微博_腾讯微博视觉设计包括哪些内容
  • 设计和建设企业网站心得和体会wordpress通过微信投稿
  • 用备案的网站做违法网站动漫网站开发优势
  • 如何用自己电脑做网站免费网站优化软件
  • 网站右侧浮动导航在网站图片源代码alt写入关键词后为什么不显示只显示title内容
  • 制作企业网站得多长时间江苏省招标投标信息网
  • php律师网站源码网站配色方案
  • 潍坊米搜网站建设制作网站能挣钱
  • 四平做网站公司网站快速备案
  • 陕西建设网站美食网站开发的背景
  • 天水建网站杭州网络推广平台
  • 如何用源码搭建网站源码杨凌网站开发
  • 在网站开发中应该避免哪些漏洞网站设计教科书
  • 个人做跨境电商的平台网站有哪些好看logo图片高清
  • 淘宝优惠券网站怎么做的潍坊网站建设app
  • 绵阳网站建设报价免费制作图片
  • 网站建设的费用估算浙江响应式网站建设公司
  • 网站建设的空间是什么意思旅游网站开发盈利模式