2017-01-22 138 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) 
相关问题