ZBLOG

GO语言,gin框架,打包指定的文件为压缩包,并以data形式返回

在使用Go语言和Gin框架打包指定文件为压缩包,并以”data”形式返回,你可以按照以下步骤进行操作:

  1. 首先,确保你已经安装了Gin框架。你可以使用go get命令来安装它:
go get -u github.com/gin-gonic/gin
  1. 创建一个新的Go文件,比如main.go,并导入所需的包:
package main

import (
	"github.com/gin-gonic/gin"
	"io/ioutil"
	"net/http"
	"os"
)

func main() {
	router := gin.Default()

	router.GET("/download", func(c *gin.Context) {
		filePath := "./your-file-path.txt" // 指定要打包的文件路径

		data, err := packFile(filePath)
		if err != nil {
			c.String(http.StatusInternalServerError, "Failed to pack file")
			return
		}

		c.Data(http.StatusOK, "application/octet-stream", data)
	})

	router.Run(":8080")
}

// 打包文件为压缩包并返回数据
func packFile(filePath string) ([]byte, error) {
	file, err := os.Open(filePath)
	if err != nil {
		return nil, err
	}
	defer file.Close()

	fileInfo, err := file.Stat()
	if err != nil {
		return nil, err
	}

	data, err := ioutil.ReadAll(file)
	if err != nil {
		return nil, err
	}

	contentDisposition := "attachment; filename=packed.zip" // 下载时显示的文件名

	header := make([]byte, 0)
	header = append(header,
	  0x50, 0x4B, 0x03, 0x04,
	  0x14, 0x00, 0x02, 0x00,
	  0x08, 0x00, 0xF5, 0x5A,
	  byte(fileInfo.ModTime().Unix() & (1<<32 - 1)),
	  byte((fileInfo.ModTime().Unix() >> 8) & (1<<32 - 1)),
	  byte((fileInfo.ModTime().Unix() >>16) & (1<<32 -1)),
	  byte((fileInfo.ModTime().Unix() >>24) & (1<<32 -1)), // 修改时间
	)

	header = append(header,
		byte(len(filePath)&(1<<8-1)),
		byte(len(filePath)>>(8)&(1<<8-1)),
	)
	
	header = append(header, []byte(filePath)...)

	data = append(header, data...)

	return data, nil
}
  1. 替换代码中的"./your-file-path.txt"为你要打包的文件的实际路径。

  2. 运行程序,访问http://localhost:8080/download即可下载压缩包。

请注意,此示例仅演示了如何将文件打包为压缩包并返回数据,你可能需要根据自己的需求进行修改和扩展。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=12519

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?