本文整理汇总了Golang中archive/tar.FileInfoHeader函数的典型用法代码示例。如果您正苦于以下问题:Golang FileInfoHeader函数的具体用法?Golang FileInfoHeader怎么用?Golang FileInfoHeader使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了FileInfoHeader函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: StreamFile
// StreamFile streams a file or directory entry into StreamArchive.
func (s *StreamArchive) StreamFile(relPath string, fi os.FileInfo, data []byte) error {
if fi.IsDir() {
fh, err := tar.FileInfoHeader(fi, "")
if err != nil {
return err
}
fh.Name = relPath + "/"
if err = s.Writer.WriteHeader(fh); err != nil {
return err
}
} else {
target := ""
if fi.Mode()&os.ModeSymlink != 0 {
target = string(data)
}
fh, err := tar.FileInfoHeader(fi, target)
if err != nil {
return err
}
fh.Name = filepath.Join(relPath, fi.Name())
if err = s.Writer.WriteHeader(fh); err != nil {
return err
}
if _, err = s.Writer.Write(data); err != nil {
return err
}
}
return nil
}
示例2: addFileToTar
func addFileToTar(zw *tar.Writer, item someutils.ArchiveItem, isVerbose bool, outPipe io.Writer) error {
if isVerbose {
fmt.Fprintf(outPipe, "Adding %s\n", item.FileSystemPath)
}
binfo, err := os.Stat(item.FileSystemPath)
if err != nil {
return err
}
if binfo.IsDir() {
header, err := tar.FileInfoHeader(binfo, "")
if err != nil {
return err
}
header.Name = item.ArchivePath
err = zw.WriteHeader(header)
if err != nil {
return err
}
file, err := os.Open(item.FileSystemPath)
if err != nil {
return err
}
fis, err := file.Readdir(0)
for _, fi := range fis {
err = addFileToTar(zw, someutils.ArchiveItem{filepath.Join(item.FileSystemPath, fi.Name()), filepath.Join(item.ArchivePath, fi.Name()), nil}, isVerbose, outPipe)
if err != nil {
return err
}
}
} else {
header, err := tar.FileInfoHeader(binfo, "")
if err != nil {
return err
}
header.Name = item.ArchivePath
err = zw.WriteHeader(header)
if err != nil {
return err
}
bf, err := os.Open(item.FileSystemPath)
if err != nil {
return err
}
defer bf.Close()
_, err = io.Copy(zw, bf)
if err != nil {
return err
}
err = zw.Flush()
if err != nil {
return err
}
err = bf.Close()
if err != nil {
return err
}
}
return err
}
示例3: addDir
func addDir(writer *tar.Writer, dirpath string) error {
dir, err := os.Open(dirpath)
if err != nil {
return err
}
defer dir.Close()
fi, err := dir.Stat()
if err != nil {
return err
}
header, err := tar.FileInfoHeader(fi, "")
if err != nil {
return err
}
header.Name = dirpath
err = writer.WriteHeader(header)
if err != nil {
return err
}
fis, err := dir.Readdir(0)
if err != nil {
return err
}
for _, fi := range fis {
if fi.IsDir() {
err = addDir(writer, path.Join(dirpath, fi.Name()))
} else {
err = addFile(writer, path.Join(dirpath, fi.Name()))
}
if err != nil {
return err
}
}
return nil
}
示例4: writeFileToTarWriter
func writeFileToTarWriter(tarWriter *tar.Writer, info os.FileInfo, absoluteFilePath, overwriteFileName string, isOnlyFile bool) {
hdr, err := tar.FileInfoHeader(info, "")
CheckError(err)
if overwriteFileName != "" {
hdr.Name = overwriteFileName
}
if hdr.Xattrs == nil {
hdr.Xattrs = map[string]string{}
}
hdr.Xattrs["SIZE"] = fmt.Sprintf("%d", info.Size())
if isOnlyFile {
hdr.Xattrs["SINGLE_FILE_ONLY"] = "1"
}
err = tarWriter.WriteHeader(hdr)
CheckError(err)
if !info.IsDir() {
file, err := os.Open(absoluteFilePath)
CheckError(err)
defer file.Close()
_, err = io.Copy(tarWriter, file)
CheckError(err)
}
}
示例5: createTarArchive
func createTarArchive(files []string, output io.WriteCloser) error {
archive := tar.NewWriter(output)
defer archive.Close()
for _, path := range files {
file, err := os.Open(path)
if err != nil {
return fmt.Errorf("Unable to read file %s: %s", path, err)
}
defer file.Close()
fi, err := file.Stat()
if err != nil {
return fmt.Errorf("Unable to get fileinfo for %s: %s", path, err)
}
header, err := tar.FileInfoHeader(fi, path)
if err != nil {
return fmt.Errorf("Failed to create tar header for %s: %s", path, err)
}
if err := archive.WriteHeader(header); err != nil {
return fmt.Errorf("Failed to write tar header for %s: %s", path, err)
}
if _, err := io.Copy(archive, file); err != nil {
return fmt.Errorf("Failed to copy %s data to archive: %s", path, err)
}
}
return nil
}
示例6: compress
func (wft *tarWalk) compress(name, fpath string, fi os.FileInfo) (bool, error) {
isSym := fi.Mode()&os.ModeSymlink > 0
link := ""
if isSym {
link, _ = os.Readlink(fpath)
}
hdr, err := tar.FileInfoHeader(fi, link)
if err != nil {
return false, err
}
hdr.Name = name
tw := wft.tw
err = tw.WriteHeader(hdr)
if err != nil {
return false, err
}
if isSym == false {
fr, err := os.Open(fpath)
if err != nil {
return false, err
}
defer fr.Close()
_, err = io.Copy(tw, fr)
if err != nil {
return false, err
}
tw.Flush()
}
return true, nil
}
示例7: Walk
func (t *tarRenderer) Walk(path string, finfo os.FileInfo, err error) error {
if err != nil {
return err
}
fh, err := tar.FileInfoHeader(finfo, "")
if err != nil {
return err
}
fh.Name = "download/" + path
err = t.w.WriteHeader(fh)
if err != nil {
return err
}
if finfo.IsDir() {
return nil
}
f, err := os.Open(filepath.Join(t.root, path))
if err != nil {
return err
}
defer f.Close()
_, err = io.Copy(t.w, f)
return err
}
示例8: WriteToTar
func WriteToTar(tarWriter *tar.Writer, file *TarFile) error {
hdr, err := tar.FileInfoHeader(file.Info, "")
if err != nil {
return fmt.Errorf("Unable to get tar FileInfoHeader of tar file '%s', error: %s", file.FileName, err.Error())
}
hdr.Name = file.FileName
if hdr.Xattrs == nil {
hdr.Xattrs = map[string]string{}
}
hdr.Xattrs["SIZE"] = fmt.Sprintf("%d", file.Info.Size())
if file.IsOnlyFile {
hdr.Xattrs["SINGLE_FILE_ONLY"] = "1"
}
err = tarWriter.WriteHeader(hdr)
if err != nil {
return fmt.Errorf("Unable to write tar header for file '%s', error: %s", file.FileName, err.Error())
}
if !file.HasContent() {
return nil
}
defer file.ContentReadCloser.Close()
_, err = io_throttler.CopyThrottled(io_throttler.DefaultIOThrottlingBandwidth, tarWriter, file.ContentReadCloser)
return err
}
示例9: createTarArchive
func (ctx *runContext) createTarArchive(fd *os.File, dir string) error {
tarFd := tar.NewWriter(fd)
defer tarFd.Close()
err := filepath.Walk(dir, func(name string, info os.FileInfo, err error) error {
if err != nil {
return errgo.Mask(err, errgo.Any)
}
if info.IsDir() {
return nil
}
tarHeader, err := tar.FileInfoHeader(info, name)
if err != nil {
return fmt.Errorf("fail to build tar header: %v", err)
}
err = tarFd.WriteHeader(tarHeader)
if err != nil {
return fmt.Errorf("fail to write tar header: %v", err)
}
fileFd, err := os.OpenFile(name, os.O_RDONLY, 0600)
if err != nil {
return errgo.Mask(err, errgo.Any)
}
_, err = stdio.Copy(tarFd, fileFd)
if err != nil {
return errgo.Mask(err, errgo.Any)
}
return nil
})
if err != nil {
return errgo.Mask(err, errgo.Any)
}
return nil
}
示例10: addFile
func addFile(writer *tar.Writer, filepath string) error {
f, err := os.Open(filepath)
if err != nil {
return err
}
defer f.Close()
fi, err := os.Lstat(filepath)
if err != nil {
return err
}
if fi.Mode()&os.ModeSymlink == os.ModeSymlink {
target, err := os.Readlink(filepath)
if err != nil {
return err
}
return addSymlink(writer, filepath, target)
}
header, err := tar.FileInfoHeader(fi, "")
if err != nil {
return err
}
header.Name = filepath
err = writer.WriteHeader(header)
if err != nil {
return err
}
n, err := io.Copy(writer, f)
if err != nil {
return err
}
if n != fi.Size() {
return io.ErrShortWrite
}
return nil
}
示例11: _tar_compress
func _tar_compress(call otto.FunctionCall) otto.Value {
var (
baseDir string
)
source, _ := call.Argument(0).ToString()
target, _ := call.Argument(1).ToString()
filename := filepath.Base(source)
target = filepath.Join(target, fmt.Sprintf("%s.tar", filename))
tarfile, err := os.Create(target)
if err != nil {
jsThrow(call, err)
}
defer tarfile.Close()
tarball := tar.NewWriter(tarfile)
defer tarball.Close()
info, err := os.Stat(source)
if err != nil {
jsThrow(call, err)
}
if info.IsDir() {
baseDir = filepath.Base(source)
}
err = filepath.Walk(source,
func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
header, err := tar.FileInfoHeader(info, info.Name())
if err != nil {
return err
}
if baseDir != "" {
header.Name = filepath.Join(baseDir, strings.TrimPrefix(path, source))
}
if err := tarball.WriteHeader(header); err != nil {
return err
}
if info.IsDir() {
return nil
}
file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()
_, err = io.Copy(tarball, file)
return err
})
return otto.Value{}
}
示例12: recursiveTar
func recursiveTar(base, file string, tw *tar.Writer) error {
filepath := path.Join(base, file)
stat, err := os.Stat(filepath)
if err != nil {
return err
}
if stat.IsDir() {
files, err := ioutil.ReadDir(filepath)
if err != nil {
return err
}
for _, f := range files {
if err := recursiveTar(base, path.Join(file, f.Name()), tw); err != nil {
return err
}
}
return nil
}
hdr, err := tar.FileInfoHeader(stat, filepath)
if err != nil {
return err
}
hdr.Name = file
if err := tw.WriteHeader(hdr); err != nil {
return err
}
f, err := os.Open(filepath)
if err != nil {
return err
}
defer f.Close()
_, err = io.Copy(tw, f)
return err
}
示例13: targzWalk
func targzWalk(dirPath string, tw *tar.Writer) {
var walkfunc filepath.WalkFunc
walkfunc = func(path string, fi os.FileInfo, err error) error {
h, err := tar.FileInfoHeader(fi, "")
handleError(err)
h.Name = "./app/" + path
if fi.Mode()&os.ModeSymlink != 0 {
linkPath, err := os.Readlink(path)
handleError(err)
h.Linkname = linkPath
}
err = tw.WriteHeader(h)
handleError(err)
if fi.Mode()&os.ModeDir == 0 && fi.Mode()&os.ModeSymlink == 0 {
fr, err := os.Open(path)
handleError(err)
defer fr.Close()
_, err = io.Copy(tw, fr)
handleError(err)
}
return nil
}
filepath.Walk(dirPath, walkfunc)
}
示例14: Tar
func Tar(base string, w io.Writer) error {
tw := tar.NewWriter(w)
err := filepath.Walk(base, func(path string, info os.FileInfo, err error) error {
name, _ := filepath.Rel(base, path)
if name == "." {
return nil
}
hdr, err := tar.FileInfoHeader(info, "")
if err != nil {
return err
}
hdr.Name = name
tw.WriteHeader(hdr)
if info.IsDir() {
return nil
}
// write file content
f, err := os.Open(path)
if err != nil {
return err
}
_, err = io.Copy(tw, f)
f.Close()
return err
})
if err != nil {
return err
}
return tw.Close()
}
示例15: _getFileData
func _getFileData(fpath string) (*bytes.Buffer, error) {
if data, err := ioutil.ReadFile(fpath); err != nil {
return nil, err
} else {
if fi, err := os.Stat(fpath); err != nil {
return nil, err
} else {
reads := bytes.NewReader(data)
var buff bytes.Buffer
gw := gzip.NewWriter(&buff)
defer gw.Close()
tw := tar.NewWriter(gw)
defer tw.Close()
hdr, err := tar.FileInfoHeader(fi, "")
if err != nil {
return nil, err
}
if err := tw.WriteHeader(hdr); err != nil {
return nil, err
}
if _, err := io.Copy(tw, reads); err != nil {
return nil, err
}
return &buff, nil
}
}
}