MCPcopy
hub / github.com/OpenListTeam/OpenList / upRemote

Method upRemote

drivers/cloudreve_v4/util.go:412–482  ·  view source on GitHub ↗
(ctx context.Context, file model.FileStreamer, u FileUploadResp, up driver.UpdateProgress)

Source from the content-addressed store, hash-verified

410}
411
412func (d *CloudreveV4) upRemote(ctx context.Context, file model.FileStreamer, u FileUploadResp, up driver.UpdateProgress) error {
413 DEFAULT := int64(u.ChunkSize)
414 ss, err := stream.NewStreamSectionReader(file, int(DEFAULT), &up)
415 if err != nil {
416 return err
417 }
418
419 uploadUrl := u.UploadUrls[0]
420 credential := u.Credential
421 var finish int64 = 0
422 var chunk int = 0
423 for finish < file.GetSize() {
424 if utils.IsCanceled(ctx) {
425 return ctx.Err()
426 }
427 left := file.GetSize() - finish
428 byteSize := min(left, DEFAULT)
429 utils.Log.Debugf("[CloudreveV4-Remote] upload range: %d-%d/%d", finish, finish+byteSize-1, file.GetSize())
430 rd, err := ss.GetSectionReader(finish, byteSize)
431 if err != nil {
432 return err
433 }
434 err = retry.Do(
435 func() error {
436 rd.Seek(0, io.SeekStart)
437 req, err := http.NewRequestWithContext(ctx, http.MethodPost, uploadUrl+"?chunk="+strconv.Itoa(chunk),
438 driver.NewLimitedUploadStream(ctx, rd))
439 if err != nil {
440 return err
441 }
442
443 req.ContentLength = byteSize
444 req.Header.Set("Authorization", fmt.Sprint(credential))
445 req.Header.Set("User-Agent", d.getUA())
446 res, err := base.HttpClient.Do(req)
447 if err != nil {
448 return err
449 }
450 defer res.Body.Close()
451 if res.StatusCode != 200 {
452 return fmt.Errorf("server error: %d", res.StatusCode)
453 }
454 body, err := io.ReadAll(res.Body)
455 if err != nil {
456 return err
457 }
458 var up Resp
459 err = json.Unmarshal(body, &up)
460 if err != nil {
461 return err
462 }
463 if up.Code != 0 {
464 return errors.New(up.Msg)
465 }
466 return nil
467 },
468 retry.Context(ctx),
469 retry.Attempts(3),

Callers 1

PutMethod · 0.95

Calls 14

GetSectionReaderMethod · 0.95
getUAMethod · 0.95
FreeSectionReaderMethod · 0.95
NewStreamSectionReaderFunction · 0.92
IsCanceledFunction · 0.92
NewLimitedUploadStreamFunction · 0.92
minFunction · 0.85
ErrMethod · 0.80
GetSizeMethod · 0.65
DoMethod · 0.65
CloseMethod · 0.65
SeekMethod · 0.45

Tested by

no test coverage detected