mirror of
https://github.com/nabbar/golib.git
synced 2025-12-24 11:51:02 +08:00
Add feature to change http timeout directly in httpcli store in aws client Add copy/MPUCopy function Update mpu to allow copy with MPU Package Cobra Fix println by fmt.Fprint to os.stdout Package Crypt Refactor package to use instance of crypt instead of a global crypt unique instance Allow to gen key/nonce Add io stream reader/writer instead of only buffer slice encoder decoder Package file/bandwidth Add new subpackage bandwith to limit a amount of byte read/write for a duraction Use file/progress function increment/reset Allow to add custom function increment / reset Package IOUtils Remove useless file error.go, tempFile.go (replaced by package file) Move fileDescriptor to a subpackage fileDescriptor: allow to change nb of FD for linux/windows os Move Buffer ReadCloser to a new subpackage: allow to add close function to buffer, and expose read / write io interface Add sub package multiplexer to allow send/receive multiple io stream into on io stream Package Socket Rework to expose io stream instead of buffer Fix minor bugs Other: Bump dependencies Update code following bump dependencies
Package Archive
This package will try to do all uncompress/unarchive and extract one file or all file. This package will expose 2 functions :
- ExtractFile : for one file extracted
- ExtractAll : to extract all file
Example of implementation
Example of one file extracted
To use ExtractFile function, you will need this parameters :
src: is the source file into aioutils.FileProgressstruct to expose anos.Filepointer with interfaceio.WriteTo,io.ReadFrom,io.ReaderAtand progress capabilitiesdst: is the source file into aioutils.FileProgressstruct to expose anos.Filepointer with interfaceio.WriteTo,io.ReadFrom,io.ReaderAtand progress capabilitiesfilenameContain: is astringto search in the file name to find it and extract it. This string will be search into thestrings.ContainsfunctionfilenameRegex: is a regex patternstringto search in the file name any match and extract it. This string will be search into theregexp.MatchStringfunction
You can implement this function as it. This example is available in test/test-archive folder.
import (
"io"
"io/ioutil"
"github.com/nabbar/golib/archive"
"github.com/nabbar/golib/ioutils"
)
const fileName = "fullpath to my archive file"
func main() {
var (
src ioutils.FileProgress
dst ioutils.FileProgress
err errors.Error
)
// register closing function in output function callback
defer func() {
if src != nil {
_ = src.Close()
}
if dst != nil {
_ = dst.Close()
}
}()
// open archive with a ioutils NewFileProgress function
if src, err = ioutils.NewFileProgressPathOpen(fileName); err != nil {
panic(err)
}
// open a destination with a ioutils NewFileProgress function, as a temporary file
if dst, err = ioutils.NewFileProgressTemp(); err != nil {
panic(err)
}
// call the extract file function
if err = archive.ExtractFile(tmp, rio, "path/to/my/file/into/archive", "archive name regex"); err != nil {
panic(err)
}
}
Example of all files extracted
To use ExtractAll function, you will need this parameters :
src: is the source file into aioutils.FileProgressstruct to expose anos.Filepointer with interfaceio.WriteTo,io.ReadFrom,io.ReaderAtand progress capabilitiesoriginalName: is astringto define the originalName of the archive. This params is used to create a unique file created into the outputPath if the archive is not an archive or just compressed with a not catalogued compress type like gzip or bzip2.outputPath: is astringto precise the destination output directory (full path). All extracted file will be extracted with this directory as base of path.defaultDirPerm: is aos.FileModeto precise the permission of directory. This parameters is usefull if the output directory is not existing.
You can implement this function as it. This example is available in test/test-archive-all folder.
import (
"io"
"io/ioutil"
"github.com/nabbar/golib/archive"
"github.com/nabbar/golib/ioutils"
)
const fileName = "fullpath to my archive file"
func main() {
var (
src ioutils.FileProgress
tmp ioutils.FileProgress
out string
err error
)
// open archive with a ioutils NewFileProgress function
if src, err = ioutils.NewFileProgressPathOpen(fileName); err != nil {
panic(err)
}
// create an new temporary file to use his name as output path
if tmp, err = ioutils.NewFileProgressTemp(); err != nil {
panic(err)
} else {
// get the filename of the temporary file
out = tmp.FilePath()
// close the temporary file will call the delete temporary file
_ = tmp.Close()
}
if err = archive.ExtractAll(src, path.Base(src.FilePath()), out, 0775); err != nil {
panic(err)
}
}