diff --git a/README.md b/README.md index 685168061..6e5d1dc2d 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,7 @@ directories to and from different cloud storage providers. - China Mobile Ecloud Elastic Object Storage (EOS) [:page_facing_up:](https://rclone.org/s3/#china-mobile-ecloud-eos) - Cloudflare R2 [:page_facing_up:](https://rclone.org/s3/#cloudflare-r2) - Citrix ShareFile [:page_facing_up:](https://rclone.org/sharefile/) +- Cubbit DS3 [:page_facing_up:](https://rclone.org/s3/#Cubbit) - DigitalOcean Spaces [:page_facing_up:](https://rclone.org/s3/#digitalocean-spaces) - Digi Storage [:page_facing_up:](https://rclone.org/koofr/#digi-storage) - Dreamhost [:page_facing_up:](https://rclone.org/s3/#dreamhost) diff --git a/backend/s3/s3.go b/backend/s3/s3.go index 742d77637..446136e98 100644 --- a/backend/s3/s3.go +++ b/backend/s3/s3.go @@ -95,6 +95,9 @@ var providerOption = fs.Option{ }, { Value: "Cloudflare", Help: "Cloudflare R2 Storage", + }, { + Value: "Cubbit", + Help: "Cubbit DS3 Object Storage", }, { Value: "DigitalOcean", Help: "DigitalOcean Spaces", @@ -360,6 +363,14 @@ func init() { Value: "auto", Help: "R2 buckets are automatically distributed across Cloudflare's data centers for low latency.", }}, + }, { + Name: "region", + Help: "Region to connect to.", + Provider: "Cubbit", + Examples: []fs.OptionExample{{ + Value: "eu-west-1", + Help: "Europe West", + }}, }, { Name: "region", Help: "Region to connect to for FileLu S5.", @@ -737,7 +748,7 @@ func init() { }, { Name: "region", Help: "Region to connect to.\n\nLeave blank if you are using an S3 clone and you don't have a region.", - Provider: "!AWS,Alibaba,ArvanCloud,ChinaMobile,Cloudflare,FlashBlade,FileLu,Hetzner,HuaweiOBS,IDrive,Intercolo,IONOS,Liara,Linode,Magalu,Mega,OVHcloud,Petabox,Qiniu,Rabata,RackCorp,Scaleway,Selectel,Servercore,SpectraLogic,Storj,Synology,TencentCOS,Zata", + Provider: "!AWS,Alibaba,ArvanCloud,ChinaMobile,Cloudflare,Cubbit,FlashBlade,FileLu,Hetzner,HuaweiOBS,IDrive,Intercolo,IONOS,Liara,Linode,Magalu,Mega,OVHcloud,Petabox,Qiniu,Rabata,RackCorp,Scaleway,Selectel,Servercore,SpectraLogic,Storj,Synology,TencentCOS,Zata", Examples: []fs.OptionExample{{ Value: "", Help: "Use this if unsure.\nWill use v4 signatures and an empty region.", @@ -938,6 +949,14 @@ func init() { Value: "eos-anhui-1.cmecloud.cn", Help: "Anhui China (Huainan)", }}, + }, { + Name: "endpoint", + Help: "Endpoint for Cubbit DS3 Object Storage.", + Provider: "Cubbit", + Examples: []fs.OptionExample{{ + Value: "s3.cubbit.eu", + Help: "Cubbit DS3 Object Storage endpoint", + }}, }, { Name: "endpoint", Help: "Endpoint for FileLu S5 Object Storage.\nRequired when using FileLu S5.", @@ -1690,7 +1709,7 @@ func init() { }, { Name: "endpoint", Help: "Endpoint for S3 API.\n\nRequired when using an S3 clone.", - Provider: "!AWS,Alibaba,ArvanCloud,ChinaMobile,GCS,Hetzner,HuaweiOBS,IBMCOS,IDrive,Intercolo,IONOS,Liara,Linode,LyveCloud,Magalu,OVHcloud,Petabox,Qiniu,Rabata,RackCorp,Scaleway,Selectel,Servercore,StackPath,Storj,Synology,TencentCOS,Zata", + Provider: "!AWS,Alibaba,ArvanCloud,ChinaMobile,Cubbit,GCS,Hetzner,HuaweiOBS,IBMCOS,IDrive,Intercolo,IONOS,Liara,Linode,LyveCloud,Magalu,OVHcloud,Petabox,Qiniu,Rabata,RackCorp,Scaleway,Selectel,Servercore,StackPath,Storj,Synology,TencentCOS,Zata", Examples: []fs.OptionExample{{ Value: "objects-us-east-1.dream.io", Help: "Dream Objects endpoint", @@ -2239,7 +2258,7 @@ func init() { }, { Name: "location_constraint", Help: "Location constraint - must be set to match the Region.\n\nLeave blank if not sure. Used when creating buckets only.", - Provider: "!AWS,Alibaba,ArvanCloud,ChinaMobile,Cloudflare,FlashBlade,FileLu,HuaweiOBS,IBMCOS,IDrive,Intercolo,IONOS,Leviia,Liara,Linode,Magalu,Mega,Outscale,OVHcloud,Petabox,Qiniu,Rabata,RackCorp,Scaleway,Selectel,Servercore,SpectraLogic,StackPath,Storj,TencentCOS", + Provider: "!AWS,Alibaba,ArvanCloud,ChinaMobile,Cloudflare,Cubbit,FlashBlade,FileLu,HuaweiOBS,IBMCOS,IDrive,Intercolo,IONOS,Leviia,Liara,Linode,Magalu,Mega,Outscale,OVHcloud,Petabox,Qiniu,Rabata,RackCorp,Scaleway,Selectel,Servercore,SpectraLogic,StackPath,Storj,TencentCOS", }, { Name: "acl", Help: `Canned ACL used when creating buckets and storing or copying objects. @@ -3828,6 +3847,9 @@ func setQuirks(opt *Options) { case "Cloudflare": virtualHostStyle = false useMultipartEtag = false // currently multipart Etags are random + case "Cubbit": + // no quirks + useMultipartEtag = false // Cubbit calculates multipart Etags differently from AWS case "ArvanCloud": listObjectsV2 = false virtualHostStyle = false diff --git a/docs/content/_index.md b/docs/content/_index.md index 5d3f39b99..88333c668 100644 --- a/docs/content/_index.md +++ b/docs/content/_index.md @@ -117,6 +117,7 @@ WebDAV or S3, that work out of the box.) {{< provider name="Citrix ShareFile" home="http://sharefile.com/" config="/sharefile/" >}} {{< provider name="Cloudflare R2" home="https://blog.cloudflare.com/r2-open-beta/" config="/s3/#cloudflare-r2" >}} {{< provider name="Cloudinary" home="https://cloudinary.com/" config="/cloudinary/" >}} +{{< provider name="Cubbit DS3" home="https://cubbit.io/ds3-cloud" config="/s3/#Cubbit" >}} {{< provider name="DigitalOcean Spaces" home="https://www.digitalocean.com/products/object-storage/" config="/s3/#digitalocean-spaces" >}} {{< provider name="Digi Storage" home="https://storage.rcs-rds.ro/" config="/koofr/#digi-storage" >}} {{< provider name="Dreamhost" home="https://www.dreamhost.com/cloud/storage/" config="/s3/#dreamhost" >}} diff --git a/docs/content/s3.md b/docs/content/s3.md index 1bc9b9af4..51a034a4e 100644 --- a/docs/content/s3.md +++ b/docs/content/s3.md @@ -18,6 +18,7 @@ The S3 backend can be used with a number of different providers: {{< provider name="China Mobile Ecloud Elastic Object Storage (EOS)" home="https://ecloud.10086.cn/home/product-introduction/eos/" config="/s3/#china-mobile-ecloud-eos" >}} {{< provider name="Cloudflare R2" home="https://blog.cloudflare.com/r2-open-beta/" config="/s3/#cloudflare-r2" >}} {{< provider name="Arvan Cloud Object Storage (AOS)" home="https://www.arvancloud.com/en/products/cloud-storage" config="/s3/#arvan-cloud" >}} +{{< provider name="Cubbit DS3" home="https://cubbit.io/ds3-cloud" config="/s3/#Cubbit" >}} {{< provider name="DigitalOcean Spaces" home="https://www.digitalocean.com/products/object-storage/" config="/s3/#digitalocean-spaces" >}} {{< provider name="Dreamhost" home="https://www.dreamhost.com/cloud/storage/" config="/s3/#dreamhost" >}} {{< provider name="Exaba" home="https://exaba.com/" config="/s3/#exaba" >}} @@ -3235,6 +3236,47 @@ does. If this is causing a problem then upload the files with A consequence of this is that `Content-Encoding: gzip` will never appear in the metadata on Cloudflare. +### Cubbit DS3 {#Cubbit} + +[Cubbit Object Storage](https://www.cubbit.io/ds3-cloud) is a geo-distributed cloud object storage platform. + +To connect to Cubbit DS3 you will need an access key and secret key pair. You can follow this [guide](https://docs.cubbit.io/getting-started/quickstart#api-keys) to retrieve these keys. They will be needed when prompted by `rclone config`. + +Default region will correspond to `eu-west-1` and the endpoint has to be specified as `s3.cubbit.eu`. + +Going through the whole process of creating a new remote by running `rclone config`, each prompt should be answered as shown below: + +``` +name> cubbit-ds3 (or any name you like) +Storage> s3 +provider> Cubbit +env_auth> false +access_key_id> YOUR_ACCESS_KEY +secret_access_key> YOUR_SECRET_KEY +region> eu-west-1 (or leave empty) +endpoint> s3.cubbit.eu +acl> +``` + +The resulting configuration file should look like: + +``` +[cubbit-ds3] +type = s3 +provider = Cubbit +access_key_id = ACCESS_KEY +secret_access_key = SECRET_KEY +region = eu-west-1 +endpoint = s3.cubbit.eu +``` + +You can then start using Cubbit DS3 with rclone. For example, to create a new bucket and copy files into it, you can run: + +``` +rclone mkdir cubbit-ds3:my-bucket +rclone copy /path/to/files cubbit-ds3:my-bucket +``` + ### DigitalOcean Spaces [Spaces](https://www.digitalocean.com/products/object-storage/) is an [S3-interoperable](https://developers.digitalocean.com/documentation/spaces/) object storage service from cloud provider DigitalOcean.