in sharedlibraries/storage/multipart.go [210:239]
func (w *MultipartWriter) initMultipartUpload() (string, error) {
initialPostURL := fmt.Sprintf("%s?uploads", w.baseURL)
req, err := http.NewRequest("POST", initialPostURL, nil)
if err != nil {
return "", fmt.Errorf("failed to create request, err: %w", err)
}
req.Header.Add("Content-Length", "0")
req.Header.Add("Date", time.Now().Format(http.TimeFormat))
req.Header.Add("Content-Type", "application/octet-stream")
if w.storageClass != "" {
req.Header.Add("x-goog-storage-class", w.storageClass)
}
w.token.SetAuthHeader(req)
resp, err := w.httpClient.Do(req)
defer googleapi.CloseBody(resp)
if err != nil {
return "", fmt.Errorf("failed to init multipart upload, err: %w", err)
}
if err := checkResponse(resp); err != nil {
return "", fmt.Errorf("multipart upload failed, err: %w", err)
}
parsedResult := &struct {
UploadID string `xml:"UploadId"`
}{}
if err := xml.NewDecoder(resp.Body).Decode(parsedResult); err != nil {
return "", fmt.Errorf("failed to decode multipart upload result, err: %w", err)
}
return parsedResult.UploadID, nil
}