func DownloadFile(file, fileURL string, client *http.Client) error { plog.Infof("Downloading %s to %s", fileURL, file) // handle bucket urls by using api to get media link parseURL, err := url.Parse(fileURL) if err != nil { return err } if parseURL.Scheme == "gs" { if client == nil { client = http.DefaultClient } api, err := storage.New(client) if err != nil { plog.Fatal(err) } path := strings.TrimLeft(parseURL.Path, "/") obj, err := api.Objects.Get(parseURL.Host, path).Do() if err != nil { plog.Fatal(err) } fileURL = obj.MediaLink } if err := os.MkdirAll(filepath.Dir(file), 0777); err != nil { return err } download := func() error { return downloadFile(file, fileURL, client) } if err := util.Retry(5, 1*time.Second, download); err != nil { return err } return nil }
func rawService(ctx context.Context) *raw.Service { return internal.Service(ctx, "storage", func(hc *http.Client) interface{} { svc, _ := raw.New(hc) return svc }).(*raw.Service) }