我想在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/