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
}