From: qydysky Date: Fri, 31 Jul 2020 19:53:12 +0000 (+0800) Subject: 17 X-Git-Tag: v0.0.2~71 X-Git-Url: http://127.0.0.1:8081/?a=commitdiff_plain;h=c148924633640dc34eaaf04fc00cb5f006908c0b;p=part%2F.git 17 --- diff --git a/flate.go b/flate.go new file mode 100644 index 0000000..84ba386 --- /dev/null +++ b/flate.go @@ -0,0 +1,158 @@ +package part + +import ( + // "sync" + // "os" + "github.com/klauspost/compress/flate" + // "io" + // "path/filepath" + // "strings" + "bytes" + // "time" + // "errors" +) + +type lflate struct {} + +func Flate() *lflate{ + return &lflate{} +} + +func (this *lflate) InFlate(byteS []byte, level int) ([]byte,error) { + buf := bytes.NewBuffer(nil) + + // 创建一个flate.Write + flateWrite, err := flate.NewWriter(buf, level) + if err != nil { + Logf().E(err.Error()) + return buf.Bytes(),err + } + defer flateWrite.Close() + // 写入待压缩内容 + flateWrite.Write(byteS) + flateWrite.Flush() + return buf.Bytes(),nil +} + +// func (this *lflate) UnFlate(zipFile string, destDir string) error { +// this.Lock() +// defer this.Unlock() + +// r, err := zip.OpenReader(zipFile) +// if err != nil { +// return err +// } +// defer func() { +// if err := r.Close(); err != nil { +// panic(err) +// } +// }() + +// os.MkdirAll(destDir, 0755) + +// // Closure to address file descriptors issue with all the deferred .Close() methods +// extractAndWriteFile := func(f *zip.File) error { +// rc, err := f.Open() +// if err != nil { +// return err +// } +// defer func() { +// if err := rc.Close(); err != nil { +// panic(err) +// } +// }() + +// path := filepath.Join(destDir, f.Name) + +// if f.FileInfo().IsDir() { +// os.MkdirAll(path, f.Mode()) +// } else { +// os.MkdirAll(filepath.Dir(path), f.Mode()) +// f, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode()) +// if err != nil { +// return err +// } +// defer func() { +// if err := f.Close(); err != nil { +// panic(err) +// } +// }() + +// _, err = io.Copy(f, rc) +// if err != nil { +// return err +// } +// } +// return nil +// } + +// for _, f := range r.File { +// err := extractAndWriteFile(f) +// if err != nil { +// return err +// } +// } + +// return nil +// } + +// type rZip struct { +// poit *zip.ReadCloser +// buf map[string]*zip.File +// sync.Mutex +// } + +// func RZip() *rZip {return &rZip{}} + +// func (t *rZip) New(zipFile string) (error) { +// t.Lock() +// defer t.Unlock() + +// t.buf = make(map[string]*zip.File) + +// var err error +// t.poit, err = zip.OpenReader(zipFile) +// if err != nil {return err} + +// for _, _f := range t.poit.File { +// if _f.FileInfo().IsDir() {continue} +// t.buf[_f.Name] = _f +// } + +// return nil +// } + +// func (t *rZip) Read(path string) (*bytes.Buffer,string,error) { +// t.Lock() +// defer t.Unlock() + +// var timeLayoutStr = "2006-01-02 15:04:05" +// var err error + +// if f,ok := t.buf[path];ok { +// if rc, err := f.Open();err == nil { +// defer rc.Close(); + +// buf := new(bytes.Buffer) +// buf.ReadFrom(rc) +// return buf,f.FileHeader.Modified.Format(timeLayoutStr),nil +// } +// return &bytes.Buffer{},time.Now().UTC().Format(timeLayoutStr),err +// } +// return &bytes.Buffer{},time.Now().UTC().Format(timeLayoutStr),errors.New("not found") +// } + +// func (t *rZip) List() []string { +// var list []string +// for k := range t.buf { +// list=append(list,k) +// } +// return list +// } + +// func (t *rZip) Close() { +// t.poit.Close() +// for k := range t.buf { +// delete(t.buf, k) +// } +// } \ No newline at end of file