func StartupHandler(w http.ResponseWriter, r *http.Request) { if len(Config) == 0 { c := appengine.NewContext(r) client := &http.Client{ Transport: &oauth2.Transport{ Source: google.AppEngineTokenSource(c, storage.ScopeReadOnly), Base: &urlfetch.Transport{ Context: c, }, }, } bucket, _ := file.DefaultBucketName(c) ctx := cloud.NewContext("davine-web", client) rc, err := storage.NewReader(ctx, bucket, "config.yaml") if err != nil { c.Errorf("error reading config: %v", err.Error()) return } configFile, err := ioutil.ReadAll(rc) rc.Close() if err != nil { c.Errorf("error reading config: %v", err.Error()) return } c.Infof("loaded config file: %v", configFile) yaml.Unmarshal(configFile, &Config) c.Infof("loaded config struct: %v", Config) } }
// アップロードされた画像をGCSに保存します。 func Store(c appengine.Context, data []byte, filename, mimeType, bucketName string) (absFilename string, err error) { if len(bucketName) == 0 { bucketName, err = file.DefaultBucketName(c) } if err != nil { c.Errorf("gcs.go:13") return "", err } opts := &file.CreateOptions{ MIMEType: mimeType, BucketName: bucketName, } wc, absFilename, err := file.Create(c, filename, opts) if err != nil { c.Errorf("gcs.go:23") return "", err } defer wc.Close() _, err = wc.Write(data) if err != nil { c.Errorf("gcs.go:30") return "", err } return absFilename, nil }
// handler is the main demo entry point that calls the GCS operations. func handler(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { http.NotFound(w, r) return } c := appengine.NewContext(r) if bucket == "" { var err error if bucket, err = file.DefaultBucketName(c); err != nil { c.Errorf("failed to get default GCS bucket name: %v", err) return } } hc := &http.Client{ Transport: &oauth2.Transport{ Source: google.AppEngineTokenSource(c, storage.ScopeFullControl), Base: &urlfetch.Transport{Context: c}, }, } ctx := cloud.NewContext(appengine.AppID(c), hc) w.Header().Set("Content-Type", "text/plain; charset=utf-8") fmt.Fprintf(w, "Demo GCS Application running from Version: %v\n", appengine.VersionID(c)) fmt.Fprintf(w, "Using bucket name: %v\n\n", bucket) d := &demo{ c: c, w: w, ctx: ctx, } n := "demo-testfile-go" d.createFile(n) d.readFile(n) d.copyFile(n) d.statFile(n) d.createListFiles() d.listBucket() d.listBucketDirMode() d.defaultACL() d.putDefaultACLRule() d.deleteDefaultACLRule() d.bucketACL() d.putBucketACLRule() d.deleteBucketACLRule() d.acl(n) d.putACLRule(n) d.deleteACLRule(n) d.deleteFiles() if d.failed { io.WriteString(w, "\nDemo failed.\n") } else { io.WriteString(w, "\nDemo succeeded.\n") } }
func (d *gcsDriver) SetContext(ctx appengine.Context) { d.c = ctx if d.bucket == "" { if defaultBucketName == "" { bucket, err := file.DefaultBucketName(ctx) if err != nil { panic(fmt.Errorf("no GCS bucket specified and a default could not be found: %s", err)) } defaultBucketName = bucket } d.bucket = defaultBucketName } }