func uploadToSignedURL()

in cli_tools/diagnostics/main.go [92:127]


func uploadToSignedURL(uploadPath string, signedURL string) error {
	client := &http.Client{
		Timeout: 10 * time.Second,
	}

	// The signed Url gives us the actual url to upload to
	req, err := http.NewRequest("POST", signedURL, nil)
	if err != nil {
		return err
	}
	req.Header.Set("x-goog-resumable", "start")
	resp, err := client.Do(req)
	if err != nil {
		return err
	}
	uploadURL := resp.Header.Get("Location")

	// Upload the file
	f, err := os.Open(uploadPath)
	if err != nil {
		return err
	}
	bodyReader, bodyWriter := io.Pipe()
	go func() {
		defer bodyWriter.Close()
		defer f.Close()
		io.Copy(bodyWriter, f)
	}()

	req, err = http.NewRequest("PUT", uploadURL, bodyReader)
	if err != nil {
		return err
	}
	_, err = client.Do(req)
	return err
}