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

响应式视频网站物联网app开发平台

响应式视频网站,物联网app开发平台,wordpress安装音乐插件,php网站目录系统在没有加入下面这串代码之前,下载的压缩包一直为空。遂debug了两个小时。。。 可以在服务端本地创建压缩包。单独将服务端本地的压缩包发送给客户端也是没问题的。但是两个合起来,客户端接收到的压缩包内容就为空了。 期间也尝试了 zipFile.Close() zipW…

在没有加入下面这串代码之前,下载的压缩包一直为空。遂debug了两个小时。。。
可以在服务端本地创建压缩包。单独将服务端本地的压缩包发送给客户端也是没问题的。但是两个合起来,客户端接收到的压缩包内容就为空了。
期间也尝试了
zipFile.Close()
zipWriter.Close()
但是zipFile不能立刻关

	// 关闭 ZIP 归档,确保所有数据都被写入压缩包文件err = zipWriter.Close()if err != nil {fmt.Println("无法关闭 ZIP 归档:", err)return}

将缓冲区中的数据刷新到磁盘上的压缩包文件。
在创建 ZIP 归档后,需要调用 zipWriter.Close() 来确保所有的数据都被写入压缩包文件。在 zipWriter.Close() 被调用之前,压缩包文件可能仍然处于打开状态,并且尚未完全写入磁盘。

func download(c *gin.Context) {tmpData := make(map[string]interface{})if err := c.ShouldBindJSON(&tmpData); err != nil {log.Println(err)c.JSON(http.StatusBadRequest, gin.H{"msg": "请求参数错误"})return}// 获取要下载的文件列表filePaths := tmpData["selectedIds"].([]interface{})// 获取当前时间currentTime := time.Now()// 格式化为特定格式formattedTime := currentTime.Format("2006-01-02-15-04")zipFilename := formattedTime + ".zip"tempZipPath := filepath.Join(zipFilename)// 创建压缩包文件zipFile, err := os.Create(tempZipPath)if err != nil {fmt.Println("无法创建压缩包文件:", err)return}defer zipFile.Close()// 创建 ZIP 归档zipWriter := zip.NewWriter(zipFile)defer zipWriter.Close()for _, filePath := range filePaths {idStr := fmt.Sprintf("%v", filePath)filePath := filepath.Join("nuclei-templates-original", idStr+".yaml")fmt.Printf(filePath)// 添加文件到 ZIP 归档err = addFileToZip(zipWriter, filePath)if err != nil {fmt.Println("无法添加文件到压缩包:", err)return}fmt.Println("文件已成功添加到压缩包中。")}// 关闭 ZIP 归档,确保所有数据都被写入压缩包文件err = zipWriter.Close()if err != nil {fmt.Println("无法关闭 ZIP 归档:", err)return}file, err := os.Open(tempZipPath)if err != nil {c.String(http.StatusInternalServerError, "无法打开压缩包")return}// 获取文件信息fileInfo, err := file.Stat()if err != nil {c.String(http.StatusInternalServerError, "无法获取压缩包信息")return}// 设置响应头c.Header("Content-Type", "application/zip")c.Header("Content-Disposition", "attachment; filename="+tempZipPath)c.Header("Content-Length", strconv.FormatInt(fileInfo.Size(), 10))// 将压缩包内容发送给客户端_, err = io.Copy(c.Writer, file)if err != nil {c.String(http.StatusInternalServerError, "无法发送压缩包")return}}func addFileToZip(zipWriter *zip.Writer, filePath string) error {// 打开要添加的文件file, err := os.Open(filePath)if err != nil {return err}defer file.Close()// 获取文件信息info, err := file.Stat()if err != nil {return err}// 创建 ZIP 归档中的文件header, err := zip.FileInfoHeader(info)if err != nil {return err}// 设置 ZIP 归档中的文件名header.Name = filepath.Base(filePath)// 写入文件到 ZIP 归档writer, err := zipWriter.CreateHeader(header)if err != nil {return err}_, err = io.Copy(writer, file)return err
}

gin框架跟着 狂神说,一个小时速成,讲的很好
这是老师课上的源码

package main
import ("encoding/json""log""net/http""github.com/gin-gonic/gin""github.com/thinkerou/favicon"
)
//自定义go中间件即拦截器
//给所有请求使用  则不不写在下列方法里,写了则拦截指定方法的请求func myHandler() (gin.HandlerFunc) {//通过自定义的中间件,设置的值,在后续处理只要调用了这个中间件的都可以拿到这里的参数return func(context *gin.Context) {context.Set("usersession","userid-1")//if ...context.Next() //放行context.Abort() //阻止}
}
func main() {//创建一个服务ginServer := gin.Default()ginServer.Use(favicon.New("./favicon.ico"))//加载静态页面ginServer.LoadHTMLGlob("templates/*")//加载资源目录ginServer.Static("/static","./static")//Gin RestfulginServer.GET("/hello",myHandler(),func(Context *gin.Context) {//取出中间件中的值usersession := Context.MustGet("userSession").(string) //空接口转换为stringlog.Println("------->",usersession)Context.JSON(200,gin.H{"msg":"hello,world"})})ginServer.POST("/user",func(c *gin.Context) {c.JSON(200,gin.H{"msg":"post,user"})})ginServer.PUT("/user")ginServer.DELETE("/user")//响应一个页面给前端ginServer.GET("/index",func(Context *gin.Context) {Context.HTML(http.StatusOK,"index.html",gin.H{"msg":"这是go后台传递来的数据",})      //接收前端传递过来的参数//info?userid=xxx&username=kuangshen// ginServer.GET("/user/info",func(context *gin.Context) {//  userid := context.Query("userid")//  username := context.Query("username")//  context.JSON(http.StatusOK,gin.H{//      "userid": userid,//      "username": username,//  })  // })//info/1/kaungshenginServer.GET("/user/info/:userid/:username",func(context *gin.Context) {userid := context.Param("userid")username := context.Param("username")context.JSON(200,gin.H{"userid": userid,"username": username,})})//掌握技术后面的应用- 掌握基础知识,加以了解web知识// 前端给后端传递 jsonginServer.POST("/json",func(context *gin.Context) {//request.body//[]body 返回的是切片data,_ := context.GetRawData()var m map[string]interface{}//包装为json数据 []byte_ = json.Unmarshal(data,&m)context.JSON(200,m)})//支持表单ginServer.POST("/user/add",func(context *gin.Context) {username := context.PostForm("username")password := context.PostForm("password")context.JSON(200,gin.H{"msg":"ok","username":username,"password":password,})})//路由ginServer.GET("/test",func(context *gin.Context) {//重定向context.Redirect(301,"http://baidu.com")        })//404 NoRouteginServer.NoRoute(func(context *gin.Context) {context.HTML(http.StatusNotFound,"404.html",nil)})//路由组userGroup := ginServer.Group("/user"){userGroup.GET("/add")userGroup.POST("/login")userGroup.POST("/logout")}orderGroup := ginServer.Group("order"){orderGroup.GET("/add")orderGroup.DELETE("/delete")}  
})//服务器端口ginServer.Run(":8082")
}
http://www.yayakq.cn/news/854375/

相关文章:

  • 哈尔滨网站建设哪家有电子商城网站建设价格
  • 网站内容相同算侵权吗企业网站建设一条龙服务内容
  • 淘宝店有给网站做优化amwordpress更改主机
  • 多站点网站群的建设与管理系统室内设计网站排行榜前十名有哪些
  • 企业网站建设的技术指标和经济指标茂名网站建设价格
  • 广州网站优化排名系统wordpress主题添加字体设置
  • 清新大气企业公司网站源码点点 网站建设
  • 网站常用代码o2o网站做推广公司
  • 沈阳网站设计定制软件开发和网站建设的区别
  • 做铁艺需要什么网站深圳网页制作推广公司排名
  • vs2013如何做网站网站开发和设计如何合作
  • 网站制作要用哪些软件有哪些珠海培训网站建设
  • 网站维护工程师薪酬国家建设规范网站
  • 建设网站客户资源从渠道来软件开发周期
  • 怎么在微信公众号上做网站网站开发开票
  • 网站建设培训学校北京梁山县网站建设
  • 电子商务与网站建设的发展综述赤峰网站设计
  • 商务网站主页设计公司网站死链如何修改
  • 上海网站建设哪家强百度在线扫题入口
  • 深圳网页制作与网站建设公司天津做一个简单的网站
  • 娄底建网站服务器多少钱
  • 免备案网站制作上海市建设工程协会网站
  • 网站开发需要什么工程师织梦手机wap网站标签调用
  • 赣州人才网站电子商务网站开发期末考试
  • 浙江高端网站重庆网站开发服务
  • 营销网站更受用户欢迎的原因是有什么字体设计的网站
  • 个人的小说网站如何做ovz的vps怎么做网站
  • 宁波网站建设活动小程序公众号开发方案
  • 青色系 网站应用商城app开发
  • 做网站的外包公司上班好不好广州惠科互联网技术有限公司