Resumable uploads
Use UploadControl to pause, resume, and recover large uploads when the adapter supports resumable sessions.
Start a resumable upload
Pass an UploadControl in UploadOptions.Control. The adapter must report Capabilities().Resumable.
control := files.NewUploadControl()
result, err := client.Upload(ctx, "videos/launch.mp4", files.FileBody("launch.mp4"), files.UploadOptions{
ContentType: "video/mp4",
Control: control,
Multipart: &files.MultipartOptions{
PartSize: 8 * 1024 * 1024,
},
})
if err != nil {
return err
}
fmt.Println(result.Key)Save and resume a session
UploadControl.Session() returns the provider session after the upload begins. Store it in your database if you want to resume after a process restart.
session, ok := control.Session()
if ok {
fmt.Println(session.UploadID)
}Resume with UploadControlFrom:
control := files.UploadControlFrom(savedSession)
_, err := client.Upload(ctx, savedSession.Key, files.FileBody("launch.mp4"), files.UploadOptions{
Control: control,
})
if err != nil {
return err
}Pause or abort
control.Pause()
fmt.Println(control.Status())
// Output: paused
if err := control.Abort(ctx); err != nil {
return err
}Adapters that do not support resumable uploads return a provider error when you pass Control.