I am looking to save an image in Go, something like 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()
However - I am using Blobstore on GAE and all of the examples I find seem to be based on some multi-part form upload based on a users browser...
How do I download an image on GAE/Blobstore with a simple GET request:
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)
}
I think, from context, that you mean "upload an image to blobstore" where you say "download an image on blobstore".
Once upon a time you would have created a blobstore
Writer
with https://cloud.google.com/appengine/docs/go/blobstore/reference#Create , then written on it, and closed it. But as the docs mention this is now deprecated; nowadays, you use instead the package cloud/storage
as in the example at 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)
}
etc, etc -- compared to the example, I've only changed the content type and exactly what bytes you write.
Essentially, blobstore has been replaced by cloud storage, and you should use the latter.