2017-01-22 137 views
1

我正在嘗試get a image file from URL並使用文檔here將其保存到GCS存儲。Golang將URL中的文件保存到AppEngine中的GCS存儲桶

我無法弄清楚如何創建文件從response.Body給GSC給我的AppEngine環境......我不能創建使用os.Create並在此環境中引用文件路徑,對吧?

  • 尋找技巧上傳遞response.Bodywc.Write()方法,而部署在AppEngine上。

代碼以獲取文件:

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!") 
} 

保存在本地文件GCS

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) 
相關問題