aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/unknwon/cae/zip/stream.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/unknwon/cae/zip/stream.go')
-rw-r--r--vendor/github.com/unknwon/cae/zip/stream.go77
1 files changed, 77 insertions, 0 deletions
diff --git a/vendor/github.com/unknwon/cae/zip/stream.go b/vendor/github.com/unknwon/cae/zip/stream.go
new file mode 100644
index 0000000000..18d8cc2250
--- /dev/null
+++ b/vendor/github.com/unknwon/cae/zip/stream.go
@@ -0,0 +1,77 @@
+// Copyright 2014 Unknown
+//
+// Licensed under the Apache License, Version 2.0 (the "License"): you may
+// not use this file except in compliance with the License. You may obtain
+// a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+// License for the specific language governing permissions and limitations
+// under the License.
+
+package zip
+
+import (
+ "archive/zip"
+ "io"
+ "os"
+ "path/filepath"
+)
+
+// A StreamArchive represents a streamable archive.
+type StreamArchive struct {
+ *zip.Writer
+}
+
+// NewStreamArachive returns a new streamable archive with given io.Writer.
+// It's caller's responsibility to close io.Writer and streamer after operation.
+func NewStreamArachive(w io.Writer) *StreamArchive {
+ return &StreamArchive{zip.NewWriter(w)}
+}
+
+// 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 := zip.FileInfoHeader(fi)
+ if err != nil {
+ return err
+ }
+ fh.Name = relPath + "/"
+ if _, err = s.Writer.CreateHeader(fh); err != nil {
+ return err
+ }
+ } else {
+ fh, err := zip.FileInfoHeader(fi)
+ if err != nil {
+ return err
+ }
+ fh.Name = filepath.Join(relPath, fi.Name())
+ fh.Method = zip.Deflate
+ fw, err := s.Writer.CreateHeader(fh)
+ if err != nil {
+ return err
+ } else if _, err = fw.Write(data); err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+// StreamReader streams data from io.Reader to StreamArchive.
+func (s *StreamArchive) StreamReader(relPath string, fi os.FileInfo, r io.Reader) (err error) {
+ fh, err := zip.FileInfoHeader(fi)
+ if err != nil {
+ return err
+ }
+ fh.Name = filepath.Join(relPath, fi.Name())
+
+ fw, err := s.Writer.CreateHeader(fh)
+ if err != nil {
+ return err
+ }
+ _, err = io.Copy(fw, r)
+ return err
+}