func()

in sharedlibraries/storage/multipart.go [403:432]


func (uw *uploadWorker) uploadPart(partNum int64) error {
	data := uw.buffer[:uw.offset]
	url := fmt.Sprintf("%s?uploadId=%s&partNumber=%v", uw.w.baseURL, uw.w.uploadID, partNum)
	req, err := http.NewRequest("PUT", url, bytes.NewReader(data))
	if err != nil {
		return err
	}
	req.Header.Add("Content-Length", fmt.Sprintf("%d", len(data)))
	req.Header.Add("Date", time.Now().Format(http.TimeFormat))
	uw.w.token.SetAuthHeader(req)
	resp, err := uw.httpClient.Do(req)
	defer googleapi.CloseBody(resp)
	if err != nil {
		return err
	}
	if err := checkResponse(resp); err != nil {
		return err
	}

	etag := resp.Header.Get("ETag")
	if etag == "" {
		respStr := &strings.Builder{}
		resp.Write(respStr)
		return fmt.Errorf("uploadPart did not return in the expected format. Unable to get the ETag for part %v. Resp: %v", partNum, respStr.String())
	}
	uw.w.mu.Lock()
	defer uw.w.mu.Unlock()
	uw.w.parts[partNum] = objectPart{PartNumber: partNum, ETag: etag}
	return nil
}