FileHeader
发布者:admin 发表于:417天前 阅读数:518 评论:0

本文整理汇总了Golang中archive/zip.FileHeader类的典型用法代码### 示例。如果您正苦于以下问题:Golang FileHeader类的具体用法?Golang FileHeader怎么用?Golang FileHeader使用的例子?那么恭喜您, 这里精选的类代码### 示例或许可以为您提供帮助。

在下文中一共展示了FileHeader类的18个代码### 示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码### 示例。

示例1: normalizeBuildpackArchive

func normalizeBuildpackArchive(inputFile *os.File, outputFile *os.File) (err error) {
    stats, err := inputFile.Stat()
    if err != nil {
        return
    }

    reader, err := zip.NewReader(inputFile, stats.Size())
    if err != nil {
        return
    }

    contents := reader.File

    parentPath, hasBuildpack := findBuildpackPath(contents)

    if !hasBuildpack {
        return errors.New("Zip archive does not contain a buildpack")
    }

    writer := zip.NewWriter(outputFile)

    for _, file := range contents {
        name := file.Name
        if parentPath == "." || strings.HasPrefix(name, parentPath) {
            var (
                r      io.ReadCloser
                w      io.Writer
                header *zip.FileHeader
            )

            fileInfo := file.FileInfo()
            header, err = zip.FileInfoHeader(fileInfo)
            header.Name = strings.Replace(name, parentPath+"/", "", 1)

            r, err = file.Open()
            if err != nil {
                return
            }

            w, err = writer.CreateHeader(header)
            if err != nil {
                return
            }

            io.Copy(w, r)
            err = r.Close()
            if err != nil {
                return
            }
        }
    }

    writer.Close()
    outputFile.Seek(0, 0)
    return
}

开发者ID:juggernaut,项目名称:cli,代码行数:56,代码来源:buildpack_bits.go

示例2: zipSrcDirTree2

/*
   Helper. Recursively zip the contents of a directory tree using the zip.Writer.

   Filters so it only includes .rel files

   Note: this will not work if there are symbolic links in the src directory tree.
   (because Readdir does not follow links.)
*/
func zipSrcDirTree2(w *zip.Writer, directoryPath string, relativeDirName string) (err error) {

    var dir *os.File
    var filesInDir []os.FileInfo
    dir, err = gos.Open(directoryPath)
    filesInDir, err = dir.Readdir(0)
    if err != nil {
        return
    }
    err = dir.Close()

    for _, fileInfo := range filesInDir {
        if fileInfo.IsDir() {
            subItemPath := directoryPath + "/" + fileInfo.Name()
            subItemRelativePath := relativeDirName + "/" + fileInfo.Name()
            err = zipSrcDirTree2(w, subItemPath, subItemRelativePath)
            if err != nil {
                return
            }
        } else { // plain old file to be added.
            if strings.HasSuffix(fileInfo.Name(), ".rel") || strings.HasSuffix(fileInfo.Name(), ".txt") || strings.HasSuffix(fileInfo.Name(), ".html") || strings.HasSuffix(fileInfo.Name(), ".htm") || strings.HasSuffix(fileInfo.Name(), ".css") {
                subItemPath := directoryPath + "/" + fileInfo.Name()
                subItemRelativePath := relativeDirName + "/" + fileInfo.Name()

                var fh *zip.FileHeader
                fh, err = zip.FileInfoHeader(fileInfo)
                if err != nil {
                    return
                }
                fh.Name = subItemRelativePath

                var zw io.Writer
                zw, err = w.CreateHeader(fh)
                if err != nil {
                    return
                }
                var f *os.File
                f, err = gos.Open(subItemPath)
                if err != nil {
                    return
                }

                _, err = io.Copy(zw, f)
                err = f.Close()
                if err != nil {
                    return
                }
            }
        }
    }

    return
}

开发者ID:eric-hawthorne,项目名称:relishpl-pre-code-cleanup,代码行数:61,代码来源:code_publish.go

示例3: packFile

func packFile(srcFile string, recPath string, zw *zip.Writer, fi os.FileInfo) (err error) {
    if fi.IsDir() {
        // Create zip header
        fh := new(zip.FileHeader)
        fh.Name = recPath + "/"
        fh.UncompressedSize = 0

        _, err = zw.CreateHeader(fh)
    } else {
        // Create zip header
        fh := new(zip.FileHeader)
        fh.Name = recPath
        fh.UncompressedSize = uint32(fi.Size())
        fh.SetMode(fi.Mode())
        var fw io.Writer
        fw, err = zw.CreateHeader(fh)
        if err != nil {
            return err
        }

        var f *os.File
        f, err = os.Open(srcFile)
        if err != nil {
            return err
        }
        _, err = io.Copy(fw, f)
    }
    return err
}

开发者ID:matm,项目名称:gobuild,代码行数:29,代码来源:write.go

示例4: CreateNW

// CreateNW creates a node-webkit .nw file
func (p Package) CreateNW(zw *zip.Writer, templates Templates, myapp io.Reader, includes string) error {
    // Add in a couple of package defaults
    p.Main = "index.html"
    p.EnvVar = nw.EnvVar

    if w, err := zw.Create("package.json"); err != nil {
        return err
    } else {
        if _, err := p.writeJsonTo(w); err != nil {
            return err
        }
    }

    filenameTemplates := map[string]string{
        "index.html": templates.IndexHtml,
        "client.js":  templates.ClientJs,
        "script.js":  templates.ScriptJs}
    for filename, str := range filenameTemplates {
        if w, err := zw.Create(filename); err != nil {
            return err
        } else {
            if t, err := template.New(filename).Parse(str); err != nil {
                return err
            } else {
                if err := t.Execute(w, p); err != nil {
                    return err
                }
            }
        }
    }

    if includes != "" {
        if err := copyIncludes(zw, includes); err != nil {
            return err
        }
    }

    binHeader := zip.FileHeader{Name: p.Bin}
    binHeader.SetMode(0755) // Make it executable
    if w, err := zw.CreateHeader(&binHeader); err != nil {
        return err
    } else {
        if _, err := io.Copy(w, myapp); err != nil {
            return err
        }
    }

    return nil
}

开发者ID:girishso,项目名称:golang-nw,代码行数:50,代码来源:package.go

示例5: makezipfile

func makezipfile(w io.Writer, contents zdata) {
    const dirname = "test/"
    z := zip.NewWriter(w)
    for k, v := range contents {
        header := zip.FileHeader{
            Name:   dirname + k,
            Method: zip.Store,
        }
        header.SetModTime(time.Now())
        out, _ := z.CreateHeader(&header)
        // this should check the number of bytes written, and loop
        out.Write([]byte(v))
    }
    z.Close()
}

开发者ID:ndlib,项目名称:bendo,代码行数:15,代码来源:reader_test.go

示例6: doZipDocs

func doZipDocs(w http.ResponseWriter, req *http.Request,
    path string) {

    quit := make(chan bool)
    defer close(quit)
    ch := make(chan *namedFile)
    cherr := make(chan error)

    go pathGenerator(path, ch, cherr, quit)
    go logErrors("zip", cherr)

    w.Header().Set("Content-Disposition",
        fmt.Sprintf("attachment; filename=%q", archiveFilename(path, "zip")))
    w.Header().Set("Content-Type", "application/zip")
    w.WriteHeader(200)

    zw := zip.NewWriter(w)
    for nf := range ch {
        if nf.err != nil {
            log.Printf("Error on %v: %v", nf.name, nf.err)
            continue
        }

        fh := zip.FileHeader{
            Name:             nf.name,
            Method:           zip.Deflate,
            UncompressedSize: uint32(nf.meta.Length),
            Comment:          nf.meta.OID,
        }
        fh.SetModTime(nf.meta.Modified)

        zf, err := zw.CreateHeader(&fh)
        if err != nil {
            log.Printf("Error making zip file: %v", err)
            // Client will get a broken zip file
            return
        }

        err = copyBlob(zf, nf.meta.OID)
        if err != nil {
            log.Printf("Error copying blob for %v: %v",
                nf.name, err)
            // Client will get a broken zip file
            return
        }
    }
    zw.Close()
}

开发者ID:40a,项目名称:cbfs,代码行数:48,代码来源:zip.go

示例7: zipInputFiles

// zipInputFiles deterministically builds a zip archive out of input files and
// writes it to the writer. Files are written in the order given.
func zipInputFiles(files []File, w io.Writer, log logging.Logger) error {
    writer := zip.NewWriter(w)
    defer writer.Close()

    // Reports zipping progress to the log each second.
    lastReport := time.Time{}
    progress := func(count int) {
        if time.Since(lastReport) > time.Second {
            lastReport = time.Now()
            log.Infof("Zipping files: %d files left", len(files)-count)
        }
    }

    for i, in := range files {
        progress(i)

        // Intentionally do not add timestamp or file mode to make zip archive
        // deterministic. See also zip.FileInfoHeader() implementation.
        fh := zip.FileHeader{
            Name:   in.Name(),
            Method: zip.Deflate,
        }

        mode := os.FileMode(0600)
        if in.Executable() {
            mode |= 0100
        }
        if in.Symlink() {
            mode |= os.ModeSymlink
        }
        fh.SetMode(mode)

        dst, err := writer.CreateHeader(&fh)
        if err != nil {
            return err
        }
        if in.Symlink() {
            err = zipSymlinkFile(dst, in)
        } else {
            err = zipRegularFile(dst, in)
        }
        if err != nil {
            return err
        }
    }

    return nil
}

开发者ID:nicko96,项目名称:Chrome-Infra,代码行数:50,代码来源:builder.go

示例8: Zipper

// Zipper zips file contents at a path. Helper to prepare zipped data for upload
// to S3.
func Zipper(zipPath string) (*bytes.Buffer, error) {
    f, err := os.Open(zipPath)
    if err != nil {
        return nil, err
    }
    defer f.Close()

    buffer := bytes.NewBuffer(nil)
    w := zip.NewWriter(buffer)
    fh := zip.FileHeader{}
    fh.Name = filepath.Base(zipPath)
    fh.SetMode(0755)

    // Add some files to the archive.
    var files = []struct {
        Name       string
        FileHandle *os.File
        Header     *zip.FileHeader
    }{
        {fh.Name, f, &fh},
    }

    // Loop through all files listed above
    // Can be created using file.Name or a custom file.Header for flexibility.
    // To set permissions you need to use the file.Header construct.
    for _, file := range files {
        var zf io.Writer
        if file.Header == nil {
            zf, err = w.Create(file.Name)
        } else {
            zf, err = w.CreateHeader(file.Header)
        }
        if err != nil {
            return nil, err
        }

        if _, err := io.Copy(zf, f); err != nil {
            return nil, err
        }
    }

    if err := w.Close(); err != nil {
        return nil, err
    }
    return buffer, nil
}

开发者ID:wallyqs,项目名称:util,代码行数:48,代码来源:packaging_util.go

示例9: GetWriter

func (zwp *ZipWriterPool) GetWriter(fileIndex int64) (io.WriteCloser, error) {
    file := zwp.container.Files[fileIndex]

    fh := zip.FileHeader{
        Name:               file.Path,
        UncompressedSize64: uint64(file.Size),
        Method:             zip.Deflate,
    }
    fh.SetMode(os.FileMode(file.Mode))
    fh.SetModTime(time.Now())

    w, err := zwp.zw.CreateHeader(&fh)
    if err != nil {
        return nil, errors.Wrap(err, 1)
    }

    return &nopWriteCloser{w}, nil
}

开发者ID:itchio,项目名称:wharf,代码行数:18,代码来源:zipwriterpool.go

示例10: processZipTimestampField

func processZipTimestampField(data []byte, file *zip.FileHeader) error {
    if !file.Mode().IsDir() && !file.Mode().IsRegular() {
        return nil
    }

    var tsField ZipTimestampField
    err := binary.Read(bytes.NewReader(data), binary.LittleEndian, &tsField)
    if err != nil {
        return err
    }

    if (tsField.Flags & 1) == 1 {
        modTime := time.Unix(int64(tsField.ModTime), 0)
        acTime := time.Now()
        return os.Chtimes(file.Name, acTime, modTime)
    }

    return nil
}

开发者ID:bssthu,项目名称:gitlab-ci-multi-runner,代码行数:19,代码来源:zip_extra.go

示例11: create

// create is for internal use. It allows non-payload files to be written.
func (w *Writer) create(name string) (io.Writer, error) {
    // save checksums in case there is an active writer
    _ = w.Checksum()

    ck := new(Checksum)
    w.t.manifest[name] = ck
    w.checksum = ck

    header := zip.FileHeader{
        Name:   w.t.dirname + name,
        Method: zip.Store,
    }
    header.SetModTime(time.Now())
    out, err := w.z.CreateHeader(&header)

    w.hw = util.NewHashWriter(out)

    return w.hw, err
}

开发者ID:ndlib,项目名称:bendo,代码行数:20,代码来源:writer.go

示例12: dozip

func dozip(archiveFile string, dir string) {
    // file
    file := create(archiveFile)
    defer file.Close()
    // zip
    zipWriter := zip.NewWriter(file)
    defer zipWriter.Close()
    //
    walk := func(path string, fileInfo os.FileInfo, err error) error {
        if err != nil {
            fail("Failed to traverse directory structure %v", err)
        }
        if fileInfo.Mode().IsDir() {
            return nil
        }
        print(path)
        fileToWrite := open(path)
        //
        var fileHeader *zip.FileHeader
        fileHeader, err = zip.FileInfoHeader(fileInfo)
        if err != nil {
            fail("Failed to create file info header %v", err)
        }
        fileHeader.Name = path
        //
        var w io.Writer
        w, err = zipWriter.CreateHeader(fileHeader)
        if err != nil {
            fail("Failed to create zip writer %v", err)
        }
        _, err = io.Copy(w, fileToWrite)
        if err != nil {
            fail("Failed to copy (zip writer) %v", err)
        }
        return nil
    }
    //
    err := filepath.Walk(dir, walk)
    if err != nil {
        fail("Failed to traverse directory %v %v", dir, err)
    }
}

开发者ID:WIZARD-CXY,项目名称:golang-devops-stuff,代码行数:42,代码来源:build.go

示例13: zipFile

// Deal with file
func zipFile(srcFile string, recPath string, zw *zip.Writer, fi os.FileInfo) {
    if fi.IsDir() {
        // Create zip header
        fh := new(zip.FileHeader)
        fh.Name = recPath + "/"
        fh.UncompressedSize = 0

        _, err := zw.CreateHeader(fh)
        handleError(err)
    } else {
        // Create zip header
        fh := new(zip.FileHeader)
        fh.Name = recPath
        fh.UncompressedSize = uint32(fi.Size())
        fw, err := zw.CreateHeader(fh)
        handleError(err)

        // Read file data
        buf := make([]byte, fi.Size())
        f, err := os.Open(srcFile)
        handleError(err)
        _, err = f.Read(buf)
        handleError(err)

        // Write file data to zip
        _, err = fw.Write(buf)
        handleError(err)
    }
}

开发者ID:seacoastboy,项目名称:go-compresser,代码行数:30,代码来源:go-zip.go

示例14: createZipFileEntry

func createZipFileEntry(archive *zip.Writer, fh *zip.FileHeader) error {
    fh.Method = zip.Deflate
    fw, err := archive.CreateHeader(fh)
    if err != nil {
        return err
    }

    file, err := os.Open(fh.Name)
    if err != nil {
        return err
    }

    _, err = io.Copy(fw, file)
    file.Close()
    if err != nil {
        return err
    }
    return nil
}

开发者ID:bssthu,项目名称:gitlab-ci-multi-runner,代码行数:19,代码来源:zip_create.go

示例15:

            tmpDir, err = ioutil.TempDir(os.TempDir(), "unzip_contents")
            Expect(err).NotTo(HaveOccurred())

            prevDir, err = os.Getwd()
            Expect(err).NotTo(HaveOccurred())
            Expect(os.Chdir(tmpDir)).To(Succeed())

            tmpFile, err = ioutil.TempFile("", "zipfile")
            Expect(err).NotTo(HaveOccurred())
            defer tmpFile.Close()

            zipWriter := zip.NewWriter(tmpFile)
            defer zipWriter.Close()

            var (
                header *zip.FileHeader
            )

            header = &zip.FileHeader{Name: "aaa"}
            header.SetMode(os.FileMode(0644))
            _, err = zipWriter.CreateHeader(header)
            Expect(err).NotTo(HaveOccurred())

            header = &zip.FileHeader{Name: "bbb/1.txt"}
            header.SetMode(os.FileMode(0640))
            _, err = zipWriter.CreateHeader(header)
            Expect(err).NotTo(HaveOccurred())

            header = &zip.FileHeader{Name: "bbb/2.txt"}
            header.SetMode(os.FileMode(0600))
            _, err = zipWriter.CreateHeader(header)

开发者ID:cloudfoundry-incubator,项目名称:ltc,代码行数:31,代码来源:zipper_unix_test.go

示例16: zipFiles

// zipFiles adds files transferred through the channel to zip (writer)
func zipFiles(dest io.Writer, skipOnError, unsafeArchFn bool, files <-chan ArchFileItem) (err error) {
    if dfh, ok := dest.(syncer); ok {
        defer func() {
            if e := dfh.Sync(); e != nil && err == nil && strings.Index(e.Error(), "invalid argument") < 0 {
                err = e
            }
        }()
    }
    zfh := zip.NewWriter(dest)
    defer func() {
        if e := zfh.Close(); e != nil && err == nil {
            err = e
        }
    }()
    var (
        fi         os.FileInfo
        zi         *zip.FileHeader
        w          io.Writer
        errs       []error
        openedHere bool
    )
    appendErr := func(err error) {
        if err == nil || err.Error() == "" {
            return
        }
        if errs == nil {
            errs = []error{err}
        }
    }

    for item := range files {
        openedHere = false
        if item.File == nil {
            if item.Filename == "" {
                continue
            }
            openedHere = true
            if item.File, err = os.Open(item.Filename); err != nil {
                err = fmt.Errorf("Zip cannot open %q: %v", item.Filename, err)
                if !skipOnError {
                    return err
                }
                appendErr(err)
                continue
            }
        }
        if fi, err = item.File.Stat(); err != nil {
            if openedHere {
                _ = item.File.Close()
            }
            err = fmt.Errorf("error stating %s: %s", item.File, err)
        } else if fi == nil {
            err = fmt.Errorf("nil stat of %#v", item.File)
        }
        if err != nil {
            if !skipOnError {
                return err
            }
            appendErr(err)
            continue
        }
        logger.Debug("msg", "ZipFiles", "fi", fi)
        if zi, err = zip.FileInfoHeader(fi); err != nil {
            if openedHere {
                _ = item.File.Close()
            }
            err = fmt.Errorf("cannot convert stat %s to header: %s", item.File, err)
            if !skipOnError {
                return err
            }
            appendErr(err)
            continue
        }
        if item.Archive != "" {
            zi.Name = item.Archive
        } else if unsafeArchFn {
            zi.Name = unsafeFn(zi.Name, true)
        }
        if w, err = zfh.CreateHeader(zi); err != nil {
            if openedHere {
                _ = item.File.Close()
            }
            err = fmt.Errorf("error creating header for %q: %v", zi.Name, err)
            if !skipOnError {
                return err
            }
            appendErr(err)
            continue
        }
        logger.Debug("msg", "zipping", "arch", item.Archive, "name", zi.Name)
        _, err = io.Copy(w, item.File)
        if openedHere {
            _ = item.File.Close()
        }
        if err != nil {
            err = fmt.Errorf("error writing %s to zipfile: %s", item.File, err)
            logger.Warn("msg", "write to zip", "error", err)
            if !skipOnError {
                return err
//.........这里部分代码省略.........

开发者ID:thanzen,项目名称:agostle,代码行数:101,代码来源:fileutils.go

示例17: CompressZip

func CompressZip(archiveWriter io.Writer, container *tlc.Container, pool wsync.Pool, consumer *state.Consumer) (*archiver.CompressResult, error) {
    var err error
    var uncompressedSize int64
    var compressedSize int64

    archiveCounter := counter.NewWriter(archiveWriter)

    zipWriter := zip.NewWriter(archiveCounter)
    defer zipWriter.Close()
    defer func() {
        if zipWriter != nil {
            if zErr := zipWriter.Close(); err == nil && zErr != nil {
                err = errors.Wrap(zErr, 1)
            }
        }
    }()

    for _, dir := range container.Dirs {
        fh := zip.FileHeader{
            Name: dir.Path + "/",
        }
        fh.SetMode(os.FileMode(dir.Mode))
        fh.SetModTime(time.Now())

        _, hErr := zipWriter.CreateHeader(&fh)
        if hErr != nil {
            return nil, errors.Wrap(hErr, 1)
        }
    }

    for fileIndex, file := range container.Files {
        fh := zip.FileHeader{
            Name:               file.Path,
            UncompressedSize64: uint64(file.Size),
            Method:             zip.Deflate,
        }
        fh.SetMode(os.FileMode(file.Mode))
        fh.SetModTime(time.Now())

        entryWriter, eErr := zipWriter.CreateHeader(&fh)
        if eErr != nil {
            return nil, errors.Wrap(eErr, 1)
        }

        entryReader, eErr := pool.GetReader(int64(fileIndex))
        if eErr != nil {
            return nil, errors.Wrap(eErr, 1)
        }

        copiedBytes, eErr := io.Copy(entryWriter, entryReader)
        if eErr != nil {
            return nil, errors.Wrap(eErr, 1)
        }

        uncompressedSize += copiedBytes
    }

    for _, symlink := range container.Symlinks {
        fh := zip.FileHeader{
            Name: symlink.Path,
        }
        fh.SetMode(os.FileMode(symlink.Mode))

        entryWriter, eErr := zipWriter.CreateHeader(&fh)
        if eErr != nil {
            return nil, errors.Wrap(eErr, 1)
        }

        entryWriter.Write([]byte(symlink.Dest))
    }

    err = zipWriter.Close()
    if err != nil {
        return nil, errors.Wrap(err, 1)
    }
    zipWriter = nil

    compressedSize = archiveCounter.Count()

    return &archiver.CompressResult{
        UncompressedSize: uncompressedSize,
        CompressedSize:   compressedSize,
    }, nil
}

开发者ID:itchio,项目名称:wharf,代码行数:84,代码来源:zip.go

示例18: createZipDirectoryEntry

func createZipDirectoryEntry(archive *zip.Writer, fh *zip.FileHeader) error {
    fh.Name += "/"
    _, err := archive.CreateHeader(fh)
    return err
}

开发者ID:bssthu,项目名称:gitlab-ci-multi-runner,代码行数:5,代码来源:zip_create.go