我想在Go中保存图像,类似于this:

url := "http://i.imgur.com/m1UIjW1.jpg"

response, e := http.Get(url)
if e != nil {
    log.Fatal(e)
}

defer response.Body.Close()

file, err := os.Create("/tmp/asdf.jpg")
if err != nil {
    log.Fatal(err)
}

_, err = io.Copy(file, response.Body)
if err != nil {
    log.Fatal(err)
}

file.Close()

但是-我在GAE上使用Blobstore,我发现的所有示例似乎都是基于基于users browser的多部分表单上传...

如何通过简单的GET请求在GAE/Blobstore上下载图像:
func handler(w http.ResponseWriter, r *http.Request) {
    urlImage := "http://i.imgur.com/m1UIjW1.jpg"
    //when a user calls this root handle, download urlImage to Blobstore
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

最佳答案

我认为,从上下文来看,您的意思是“将图像上传到blobstore”,其中您说“在blobstore上下载图像”。

曾几何时,您会使用https://cloud.google.com/appengine/docs/go/blobstore/reference#Create创建一个blobstore Writer,然后在其上编写并关闭它。但是,正如文档中提到的那样,现在不建议这样做;如今,您改为使用cloud/storage包作为https://godoc.org/google.golang.org/cloud/storage#example-NewWriter中的示例:

wc := storage.NewWriter(ctx, "bucketname", "filename1")
wc.ContentType = "image/jpg"
wc.ACL = []storage.ACLRule{{storage.AllUsers, storage.RoleReader}}
if _, err := wc.Write(response.Body); err != nil {
    log.Fatal(err)
}

等等-与示例相比,我仅更改了内容类型以及您写入的字节数。

本质上,blobstore已被云存储取代,您应该使用后者。

关于google-app-engine - Golang GAE将图片网址保存到Blobstore,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31754622/

10-12 01:37