unzip

package module
v0.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 11, 2023 License: MIT Imports: 9 Imported by: 1

README

go-unzip

一、这是什么?优势是什么?

Go中用来解压zip文件的API,优势:

  • 在原生的zip.File的基础上封装了易用API,一键解压
  • 支持并发解压zip文件

二、安装

go get -u github.com/compression-algorithm-research-lab/go-unzip

三、API示例

package main

import "github.com/compression-algorithm-research-lab/go-unzip"

func main() {

	options := unzip.NewOptions().
		SetSourceZipFile("test_data/foo.zip").
		SetDestinationDirectory("test_data/foo").
		SetWorkerNum(100)
	err := unzip.New(options).Unzip()
	if err != nil {
		panic(err)
	}

}

Documentation

Index

Constants

View Source
const DefaultUnzipWorkerNum = 1

DefaultUnzipWorkerNum 如果没有指定的话,默认情况下解压使用的并发数是多少

Variables

View Source
var (

	// ErrWorkerNumInvalid 解压zip文件时的并发数必须大于0,否则没法搞了
	ErrWorkerNumInvalid = errors.New("options.WorkerNum it has to be greater than 0")

	// ErrSourceZipFileEmpty 源zip文件不能为空,否则会返回此错误
	ErrSourceZipFileEmpty = errors.New("options.SourceZipFile can not empty")

	// ErrDestinationDirectoryEmpty 解压到的目录不能为空
	ErrDestinationDirectoryEmpty = errors.New("options.DestinationDirectory can not empty")
)

Functions

func BuildZipSlipError

func BuildZipSlipError(file *zip.File) error

BuildZipSlipError 当检查到zip slip文件时,为其构造错误信息

func IsZipSlip

func IsZipSlip(baseDirectory, filename string) bool

IsZipSlip 对单个文件进行zip slip检查 baseDirectory: 要解压到的目录 filename: 要解压的文件的名称

Types

type File

type File struct {

	// 底层基于的zip file
	*zip.File
	// contains filtered or unexported fields
}

File 用于表示一个zip压缩文件,在原生的zip file上封装了一些基础操作

func NewFile

func NewFile(zipFile *zip.File) *File

NewFile 从压缩文件创建文件

func (*File) ReadBytes

func (x *File) ReadBytes() (bytes []byte, returnError error)

ReadBytes 读取此压缩文件的字节数组

func (*File) SafeUnzip

func (x *File) SafeUnzip(baseDirectory string) (err error)

SafeUnzip 把文件解压到给定的路径,附带安全检查

func (*File) Save

func (x *File) Save(path string) (err error)

Save 把此文件解压并保存到硬盘上给定的位置

func (*File) Unzip

func (x *File) Unzip(baseDirectory string) (err error)

Unzip 把文件解压到给定的路径

type FileHandler

type FileHandler func(file *File, options *Options) error

FileHandler 用来处理解压出来的文件

type Options

type Options struct {

	// 源压缩文件,必须是zip格式
	SourceZipFile string

	// 解压到的目标文件夹,必须是一个目录,如果不存在的话会自动创建,如果已经存在的话尽量为空,否则可能会被重复覆盖写文件
	DestinationDirectory string

	// 解压的时候使用的并发数,如果不指定的话默认为 DefaultUnzipWorkerNum
	WorkerNum *int
}

Options 解压压缩文件时可以指定的各种选项

func NewOptions

func NewOptions() *Options

func (*Options) SetDestinationDirectory

func (x *Options) SetDestinationDirectory(destinationDirectory string) *Options

SetDestinationDirectory 设置解压后输出的文件夹的路径

func (*Options) SetSourceZipFile

func (x *Options) SetSourceZipFile(sourceZipFile string) *Options

SetSourceZipFile 设置要解压的zip文件的路径

func (*Options) SetWorkerNum

func (x *Options) SetWorkerNum(workerNum int) *Options

SetWorkerNum 设置解压时使用到的并发数

type Unzip

type Unzip struct {
	// contains filtered or unexported fields
}

Unzip 用于封装解压缩的逻辑

func New

func New(options *Options) *Unzip

New 从选项创建一个解压缩组件

func (*Unzip) Files

func (x *Unzip) Files() (fileSlice []*File, err error)

Files 读取压缩包中的所有文件和内容并返回,注意这个方法会实际解压缩文件,确保你机器的资源是足够的

func (*Unzip) SafeTraversal

func (x *Unzip) SafeTraversal(handler FileHandler) (err error)

SafeTraversal 安全的遍历压缩文件,遇到非法的或者错误的压缩文件时会自动检测报错

func (*Unzip) Traversal

func (x *Unzip) Traversal(handler FileHandler) (err error)

Traversal 遍历zip文件

func (*Unzip) Unzip

func (x *Unzip) Unzip() error

Unzip 解压文件到给定的目录

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL