如何在没有 rclone 的情况下以编程方式直接从 Digital Ocean Storage 上传到 Google Cloud Storage

How to upload from Digital Ocean Storage to Google Cloud Storage, directly, programatically without rclone

我想在不使用 rclone 的情况下以编程方式将文件从 Digital Ocean Storage 迁移到 Google Cloud Storage。

我知道驻留在 Digital Ocean Storage(DOS) 中的确切位置文件,并且我有 Google Cloud Storage(GCS) 的已签名 url。

如何修改以下代码,以便我可以将 DOS 文件直接复制到 GCS 而无需中间下载到我的计算机?

def upload_to_gcs_bucket(blob_name, path_to_file, bucket_name):
    """ Upload data to a bucket"""

    # Explicitly use service account credentials by specifying the private key
    # file.
    storage_client = storage.Client.from_service_account_json(
        'creds.json')

    #print(buckets = list(storage_client.list_buckets())

    bucket = storage_client.get_bucket(bucket_name)
    blob = bucket.blob(blob_name)
    blob.upload_from_filename(path_to_file)

    #returns a public url
    return blob.public_url

Google 的 Storage Transfer Servivce should be an answer for this type of problem (particularly because DigitalOcean Spaces 最像 S3 兼容。但是(!)我认为(我对此不熟悉并且不确定)它不能用于此配置。

如果没有某种形式的中间传输,就无法将文件从源传输到目标,但您可以做的是使用内存而不是使用文件存储作为中介.内存通常比文件存储更受限制,如果您希望运行同时进行多个传输,每个都会消耗一些存储空间。

很奇怪您使用的是签名 URL。通常,签名 URL 由第三方提供以限制对第三方存储桶的访问。如果您拥有目标存储桶,那么直接从 Google 的客户端库之一使用 Google Cloud Storage 存储桶会更容易,例如 Python Client Library.

Python 示例包括从 file and from memory. It will likely be best to stream the files into Cloud Storage if you'd prefer to not create intermediate files. Here's a Python example

上传