storage.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package main
  2. import (
  3. "fmt"
  4. "io"
  5. "io/ioutil"
  6. "log"
  7. "net/http"
  8. "os"
  9. "google.golang.org/api/googleapi"
  10. storage "google.golang.org/api/storage/v1"
  11. )
  12. func init() {
  13. registerDemo("storage", storage.DevstorageReadWriteScope, storageMain)
  14. }
  15. func storageMain(client *http.Client, argv []string) {
  16. if len(argv) != 2 {
  17. fmt.Fprintln(os.Stderr, "Usage: storage filename bucket (to upload an object)")
  18. return
  19. }
  20. service, err := storage.New(client)
  21. if err != nil {
  22. log.Fatalf("Unable to create Storage service: %v", err)
  23. }
  24. filename := argv[0]
  25. bucket := argv[1]
  26. goFile, err := os.Open(filename)
  27. if err != nil {
  28. log.Fatalf("error opening %q: %v", filename, err)
  29. }
  30. storageObject, err := service.Objects.Insert(bucket, &storage.Object{Name: filename}).Media(goFile).Do()
  31. log.Printf("Got storage.Object, err: %#v, %v", storageObject, err)
  32. if err != nil {
  33. return
  34. }
  35. resp, err := service.Objects.Get(bucket, filename).Download()
  36. if err != nil {
  37. log.Fatalf("error downloading %q: %v", filename, err)
  38. }
  39. defer resp.Body.Close()
  40. n, err := io.Copy(ioutil.Discard, resp.Body)
  41. if err != nil {
  42. log.Fatalf("error downloading %q: %v", filename, err)
  43. }
  44. log.Printf("Downloaded %d bytes", n)
  45. // Test If-None-Match - should get a "HTTP 304 Not Modified" response.
  46. obj, err := service.Objects.Get(bucket, filename).IfNoneMatch(storageObject.Etag).Do()
  47. log.Printf("Got obj, err: %#v, %v", obj, err)
  48. if googleapi.IsNotModified(err) {
  49. log.Printf("Success. Object not modified since upload.")
  50. } else {
  51. log.Printf("Error: expected object to not be modified since upload.")
  52. }
  53. }