Golang如何将上传的文件压缩成zip(小案例)

 更新时间:2024年01月30日 09:13:27   作者:R_RRR_R  
这篇文章主要介绍了Golang如何将上传的文件压缩成zip(小案例),这是一个简单的golang压缩文件小案例,可做很多的拓展,这里使用的库是archive/zip,在gopkg里面搜zip就行,需要的朋友可以参考下

Golang将上传的文件压缩成zip小案例

这是一个简单的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)
}

go语言实现zip压缩文件

直接上代码:

func ZipFiles(filename string, files []string, oldform, newform string) error {
	newZipFile, err := os.Create(filename)
	if err != nil {
		return err
	}
	defer newZipFile.Close()
	zipWriter := zip.NewWriter(newZipFile)
	defer zipWriter.Close()
	// 把files添加到zip中
	for _, file := range files {
		zipfile, err := os.Open(file)
		if err != nil {
			return err
		}
		defer zipfile.Close()
		info, err := zipfile.Stat()
		if err != nil {
			return err
		}
		header, err := zip.FileInfoHeader(info)
		if err != nil {
			return err
		}
		header.Name = strings.Replace(file, oldform, newform, -1)
		header.Method = zip.Deflate
		writer, err := zipWriter.CreateHeader(header)
		if err != nil {
			return err
		}
		if _, err = io.Copy(writer, zipfile); err != nil {
			return err
		}
	}
	return nil
}
调用:
ZipFiles(zipFileName, files, ".", ".")

注意:.表示的是根目录。需要放入压缩文件的几个文件在哪个目录,那么该函数的第3个参数就写什么,上面代码表示待压缩的文件在根目录,压缩文件(第4个参数)也将生成在根目录。

到此这篇关于Golang如何将上传的文件压缩成zip(小案例)的文章就介绍到这了,更多相关go上传文件压缩zip内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Golang内存管理之内存分配器详解

    Golang内存管理之内存分配器详解

    Go内存分配器的设计思想来源于TCMalloc,全称是Thread-Caching Malloc,核心思想是把内存分为多级管理,下面就来和大家深入聊聊Go语言内存分配器的使用吧
    2023-06-06
  • golang整合jwt的实现示例

    golang整合jwt的实现示例

    json web tokens(jwt)已成为大多数web api设计中的常见身份验证和授权方案之一,本文主要介绍了golang整合jwt的实现示例,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • Go语言实现热更新具体步骤

    Go语言实现热更新具体步骤

    这篇文章主要为大家介绍了Go语言实现热更新具体步骤详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • 教你利用Golang可选参数实现可选模式

    教你利用Golang可选参数实现可选模式

    本文讨论Golang函数可选参数及函数类型,以及如何利用可选函数类型实现可选模式。同时通过构造函数作为示例,实现强大带可选参数的构造函数,让代码更直观、灵活、支持扩展
    2023-01-01
  • goland设置控制台折叠效果

    goland设置控制台折叠效果

    这篇文章主要介绍了goland设置控制台折叠效果,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • 一文带你搞懂Golang结构体内存布局

    一文带你搞懂Golang结构体内存布局

    结构体在Go语言中是一个很重要的部分,在项目中会经常用到。这篇文章主要带大家看一下结构体在内存中是怎么分布的?通过对内存布局的了解,可以帮助我们写出更优质的代码。感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助
    2022-10-10
  • golang实现简单的tcp数据传输

    golang实现简单的tcp数据传输

    这篇文章主要为大家介绍了golang实现简单的tcp数据传输,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • golang实现单点登录系统(go-sso)

    golang实现单点登录系统(go-sso)

    这篇文章主要介绍了golang实现单点登录系统(go-sso),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Go defer 去掉闭包函数及用法分析

    Go defer 去掉闭包函数及用法分析

    这篇文章主要为大家介绍了Go defer 去掉闭包函数及用法分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • golang中iota的用法小结

    golang中iota的用法小结

    iota是Go语言中的一个预定义标识符,用于表示const声明块中每个常量的偏移值,本文主要介绍了golang中iota的用法小结,具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03

最新评论