如何直接从 Digital Ocean Storage 上传到 Google Cloud Storage,无需 rclone 以编程方式

Sup*_*Eye 1 python google-cloud-storage digital-ocean google-cloud-platform digital-ocean-spaces

我想以编程方式将文件从 Digital Ocean Storage 迁移到 Google Cloud Storage,而不使用 rclone。

我知道驻留在数字海洋存储 (DOS) 中的确切位置文件,并且我有 Google 云存储 (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
Run Code Online (Sandbox Code Playgroud)

Daz*_*kin 5

Google 的存储传输服务应该是此类问题的答案(特别是因为大多数DigitalOcean Spaces都是 S3 兼容的。但是(!)我认为(我不熟悉它并且不确定)它不能用于此配置。

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

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

Python 示例包括从文件上传和从内存上传。如果您不想创建中间文件,最好将文件流式传输到 Cloud Storage。这是一个Python 示例