Transfer
Copy objects between two Files clients with progress, optional overwrite checks, and key transforms.
Transfer between clients
Use files.Transfer when the source and destination can be different providers.
source := files.MustNew(files.Options{
Adapter: memory.New(memory.Options{}),
})
destination := files.MustNew(files.Options{
Adapter: memory.New(memory.Options{}),
})
_, err := source.Upload(ctx, "reports/q1.txt", files.StringBody("ready"), files.UploadOptions{})
if err != nil {
return err
}
result, err := files.Transfer(ctx, source, destination, files.TransferOptions{
Prefix: "reports/",
})
if err != nil {
return err
}
fmt.Println(result.Transferred)
// Output: [reports/q1.txt]Transform destination keys
result, err := files.Transfer(ctx, source, destination, files.TransferOptions{
Prefix: "reports/",
TransformKey: func(key string) string {
return "archive/" + key
},
})
if err != nil {
return err
}
fmt.Println(result.Transferred)Skip existing keys
Set Overwrite to false to keep destination objects.
overwrite := false
result, err := files.Transfer(ctx, source, destination, files.TransferOptions{
Overwrite: &overwrite,
OnProgress: func(progress files.TransferProgress) {
fmt.Println(progress.Done, progress.Total, progress.Key, progress.Status)
},
})
if err != nil {
return err
}
fmt.Println(result.Skipped)