Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > go文件压缩zip

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

作者: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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文