zipだからといって、特別なことは必要ない。
普通に書き込めばいいだけなので、
zipファイルを読み込んで、
以下のGCSのサンプルにあるように wc.Wtite() に []byte を渡してやればいい。
https://github.com/GoogleCloudPlatform/gcloud-golang/blob/master/examples/storage/appengine/app.go#L150
HTMLのformからアップロードしたzipの読み込んで、
wc.Write() に書き込むコードは以下。
zipの読み込みも単なるファイル読み込み。
f, _, err := c.Request.FormFile("client_file") if err != nil { return err } fileBuf := make([]byte, 1024) for { n, err := f.Read(fileBuf) if err != nil { return err } if 0 == n { break } } //この辺のコードはサンプルをそのまま利用しているだけ wc := d.bucket.Object(fileName).NewWriter(d.ctx) wc.ContentType = "text/plain" wc.Metadata = map[string]string{ "x-goog-meta-foo": "foo", "x-goog-meta-bar": "bar", } d.cleanUp = append(d.cleanUp, fileName) //fileBuf にzipが読み込まれているので、fileBufを wc.Wtite() に突っ込むだけ。 if _, err := wc.Write(fileBuf); err != nil { d.errorf("createFile: unable to write data to bucket %q, file %q: %v", bucket, fileName, err) return } if err := wc.Close(); err != nil { d.errorf("createFile: unable to close bucket %q, file %q: %v", bucket, fileName, err) return }