这是一个简单的golang压缩文件小案例,可做很多的拓展,这里使用的库是archive/zip,在gopkg里面搜zip就行。
使用gin框架,获取前端传过来的文件压缩成zip,存储路径入数据库中,代码简单示例如下:
@Param file formData file true "上传文件"
func UploadToZip(c *gin.Context){
//获取前端传过来的文件,如果有多个文件: 使用form,_ := c.MultipartForm()
//files := form.File["file"]
//然后遍历files拿到每个文件
file,err := c.FormFile("file")
if err != nil {
response.Fail("参数有误",c)
return
}
//创建目录和指定文件名
err = c.SaveUploadedFile( file ,"files/" + file + file.Filename)
if err != nil {
response.Fail("存储文件失败",c)
return
}
//在指定的目录生成你要的zip文件
create, err := os.Create("flies/dome.zip")
defer create.Close()
if err != nil {
response.Fail("创建失败",c)
retuen
}
//创建一个zip流
writer := zip.NewWriter(create)
defer writer.Close()
//读取存储的目录,将里面的文件压缩
readFile ,err := os.ReadDir("files")
if err != nil {
response.Fail("读取文件失败",c)
retuen
}
//遍历目录,获取单个文件
for _,rf := range readFile {
//只压缩文件,目录不做压缩
if !rf.IsDir() {
//打开要压缩的文件
open,err := os.Open("flies" + rf.Name())
if err != nil {
response.Fail("打开文件失败",c)
retuen
}
//创建一个压缩包里面的文件和文件名,这样解压后会有一个files目录,目录里面有压缩的文件
f, _ := writer.Create("flies" + rf.Name())
//将文件压缩成zip
if _,err := io.Copy(f,open);err != nil {
response.Fail("压缩失败",c)
retuen
}
}
}
//将压缩路径存放数据库
...
response.OK("压缩成功",c)
}