You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

87 lines
1.9 KiB

package assets
import (
. "XProxy/next/logger"
"bytes"
"compress/bzip2"
"compress/gzip"
"fmt"
"github.com/ulikunitz/xz"
"io"
"os"
)
const gzSample = "/root/XProxy/LICENSE.gz"
const xzSample = "/root/XProxy/LICENSE.xz"
const bz2Sample = "/root/XProxy/LICENSE.bz2"
func gzipExtract(content io.Reader) ([]byte, error) {
Logger.Debugf("Start extracting gzip archive")
reader, err := gzip.NewReader(content)
if err != nil {
Logger.Errorf("Failed to extract gzip archive -> %v", err)
return nil, err
}
defer reader.Close()
var buffer bytes.Buffer
size, err := io.Copy(&buffer, reader)
if err != nil {
Logger.Errorf("Failed to handle gzip archive -> %v", err)
return nil, err
}
Logger.Debugf("Successfully extracted gzip archive -> %d bytes", size)
return buffer.Bytes(), nil
}
func bzip2Extract(content io.Reader) ([]byte, error) {
Logger.Debugf("Start extracting bzip2 archive")
reader := bzip2.NewReader(content)
var buffer bytes.Buffer
size, err := io.Copy(&buffer, reader)
if err != nil {
Logger.Errorf("Failed to extract bzip2 archive -> %v", err)
return nil, err
}
Logger.Debugf("Successfully extracted bzip2 archive -> %d bytes", size)
return buffer.Bytes(), nil
}
func xzExtract(content io.Reader) ([]byte, error) {
Logger.Debugf("Start extracting xz archive")
reader, err := xz.NewReader(content)
if err != nil {
Logger.Errorf("Failed to extract xz archive -> %v", err)
return nil, err
}
var buffer bytes.Buffer
size, err := io.Copy(&buffer, reader)
if err != nil {
Logger.Errorf("Failed to handle xz archive -> %v", err)
return nil, err
}
Logger.Debugf("Successfully extracted xz archive -> %d bytes", size)
return buffer.Bytes(), nil
}
func Demo() {
Logger.Infof("Assets demo begin")
//fp, err := os.Open(gzSample)
//fp, err := os.Open(bz2Sample)
fp, err := os.Open(xzSample)
if err != nil {
fmt.Println("open failed")
}
defer fp.Close()
//gzipExtract(fp)
//bzip2Extract(fp)
xzExtract(fp)
//fp.Name()
}