func()

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
}