2017-01-22 17 views
1

私はget a image file from URLにしようとしていて、ドキュメントhereを使用してGCSストレージに保存しています。Golang App EngineのURLからGCSバケットへファイルを保存

私のAppEngine環境では、response.BodyからGSCにファイルを作成する方法がわかりません... os.Createを使用して作成できず、この環境でファイルパスを参照することはできません。 AppEngineの中で展開されている間wc.Write()方法にresponse.Bodyを渡すのヒントを探してい

コードファイルを取得するには:GCS

func main() { 
    url := "http://i.imgur.com/m1UIjW1.jpg" 
    // don't worry about errors 
    response, e := http.Get(url) 
    if e != nil { 
     log.Fatal(e) 
    } 

    defer response.Body.Close() 

    //open a file for writing 
    file, err := os.Create("/tmp/asdf.jpg") 
    if err != nil { 
     log.Fatal(err) 
    } 
    // Use io.Copy to just dump the response body to the file. This supports huge files 
    _, err = io.Copy(file, response.Body) 
    if err != nil { 
     log.Fatal(err) 
    } 
    file.Close() 
    fmt.Println("Success!") 
} 

保存ローカルファイルを

func (d *demo) createFile(fileName string) { 
     fmt.Fprintf(d.w, "Creating file /%v/%v\n", d.bucketName, fileName) 

     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) 

     if _, err := wc.Write([]byte("abcde\n")); err != nil { 
       d.errorf("createFile: unable to write data to bucket %q, file %q: %v", d.bucketName, fileName, err) 
       return 
     } 
     if _, err := wc.Write([]byte(strings.Repeat("f", 1024*4) + "\n")); err != nil { 
       d.errorf("createFile: unable to write data to bucket %q, file %q: %v", d.bucketName, fileName, err) 
       return 
     } 
     if err := wc.Close(); err != nil { 
       d.errorf("createFile: unable to close bucket %q, file %q: %v", d.bucketName, fileName, err) 
       return 
     } 
} 

答えて

0

あなたがWriterbytes.Bufferを探しているように思える:

var buff bytes.Buffer 
writer := NewWriter(buff) 
n, err := io.Copy(writer, response.Body) 
関連する問題