Copiar um objeto de um bucket do Cloud Storage para outro.
Mais informações
Para ver a documentação detalhada que inclui este exemplo de código, consulte:
Exemplo de código
C++
Para mais informações, consulte a documentação de referência da API Cloud Storage C++.
namespace gcs = ::google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string const& source_bucket_name,
std::string const& source_object_name,
std::string const& destination_bucket_name,
std::string const& destination_object_name) {
StatusOr<gcs::ObjectMetadata> new_copy_meta =
client.CopyObject(source_bucket_name, source_object_name,
destination_bucket_name, destination_object_name);
if (!new_copy_meta) throw std::move(new_copy_meta).status();
std::cout << "Successfully copied " << source_object_name << " in bucket "
<< source_bucket_name << " to bucket " << new_copy_meta->bucket()
<< " with name " << new_copy_meta->name()
<< ".\nThe full metadata after the copy is: " << *new_copy_meta
<< "\n";
}
C#
Para mais informações, consulte a documentação de referência da API Cloud Storage C#.
using Google.Cloud.Storage.V1;
using System;
public class CopyFileSample
{
public void CopyFile(
string sourceBucketName = "source-bucket-name",
string sourceObjectName = "source-file",
string destBucketName = "destination-bucket-name",
string destObjectName = "destination-file-name")
{
var storage = StorageClient.Create();
storage.CopyObject(sourceBucketName, sourceObjectName, destBucketName, destObjectName);
Console.WriteLine($"Copied {sourceBucketName}/{sourceObjectName} to " + $"{destBucketName}/{destObjectName}.");
}
}
Go
Para mais informações, consulte a documentação de referência da API Cloud Storage Go.
import (
"context"
"fmt"
"io"
"time"
"cloud.google.com/go/storage"
)
// copyFile copies an object into specified bucket.
func copyFile(w io.Writer, dstBucket, srcBucket, srcObject string) error {
// dstBucket := "bucket-1"
// srcBucket := "bucket-2"
// srcObject := "object"
ctx := context.Background()
client, err := storage.NewClient(ctx)
if err != nil {
return fmt.Errorf("storage.NewClient: %v", err)
}
defer client.Close()
ctx, cancel := context.WithTimeout(ctx, time.Second*10)
defer cancel()
dstObject := srcObject + "-copy"
src := client.Bucket(srcBucket).Object(srcObject)
dst := client.Bucket(dstBucket).Object(dstObject)
// Optional: set a generation-match precondition to avoid potential race
// conditions and data corruptions. The request to copy is aborted if the
// object's generation number does not match your precondition.
// For a dst object that does not yet exist, set the DoesNotExist precondition.
dst = dst.If(storage.Conditions{DoesNotExist: true})
// If the destination object already exists in your bucket, set instead a
// generation-match precondition using its generation number.
// attrs, err := dst.Attrs(ctx)
// if err != nil {
// return fmt.Errorf("object.Attrs: %v", err)
// }
// dst = dst.If(storage.Conditions{GenerationMatch: attrs.Generation})
if _, err := dst.CopierFrom(src).Run(ctx); err != nil {
return fmt.Errorf("Object(%q).CopierFrom(%q).Run: %v", dstObject, srcObject, err)
}
fmt.Fprintf(w, "Blob %v in bucket %v copied to blob %v in bucket %v.\n", srcObject, srcBucket, dstObject, dstBucket)
return nil
}
Java
Para mais informações, consulte a documentação de referência da API Cloud Storage Java.
import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
public class CopyObject {
public static void copyObject(
String projectId, String sourceBucketName, String objectName, String targetBucketName) {
// The ID of your GCP project
// String projectId = "your-project-id";
// The ID of the bucket the original object is in
// String sourceBucketName = "your-source-bucket";
// The ID of the GCS object to copy
// String objectName = "your-object-name";
// The ID of the bucket to copy the object to
// String targetBucketName = "target-object-bucket";
Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
BlobId source = BlobId.of(sourceBucketName, objectName);
BlobId target =
BlobId.of(
targetBucketName, objectName); // you could change "objectName" to rename the object
// Optional: set a generation-match precondition to avoid potential race
// conditions and data corruptions. The request returns a 412 error if the
// preconditions are not met.
Storage.BlobTargetOption precondition;
if (storage.get(targetBucketName, objectName) == null) {
// For a target object that does not yet exist, set the DoesNotExist precondition.
// This will cause the request to fail if the object is created before the request runs.
precondition = Storage.BlobTargetOption.doesNotExist();
} else {
// If the destination already exists in your bucket, instead set a generation-match
// precondition. This will cause the request to fail if the existing object's generation
// changes before the request runs.
precondition =
Storage.BlobTargetOption.generationMatch(
storage.get(targetBucketName, objectName).getGeneration());
}
storage.copy(
Storage.CopyRequest.newBuilder().setSource(source).setTarget(target, precondition).build());
System.out.println(
"Copied object "
+ objectName
+ " from bucket "
+ sourceBucketName
+ " to "
+ targetBucketName);
}
}
Node.js
Para mais informações, consulte a documentação de referência da API Cloud Storage Node.js.
/**
* TODO(developer): Uncomment the following lines before running the sample.
*/
// The ID of the bucket the original file is in
// const srcBucketName = 'your-source-bucket';
// The ID of the GCS file to copy
// const srcFilename = 'your-file-name';
// The ID of the bucket to copy the file to
// const destBucketName = 'target-file-bucket';
// The ID of the GCS file to create
// const destFileName = 'target-file-name';
// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');
// Creates a client
const storage = new Storage();
async function copyFile() {
const copyDestination = storage.bucket(destBucketName).file(destFileName);
// Optional:
// Set a generation-match precondition to avoid potential race conditions
// and data corruptions. The request to copy is aborted if the object's
// generation number does not match your precondition. For a destination
// object that does not yet exist, set the ifGenerationMatch precondition to 0
// If the destination object already exists in your bucket, set instead a
// generation-match precondition using its generation number.
const copyOptions = {
preconditionOpts: {
ifGenerationMatch: destinationGenerationMatchPrecondition,
},
};
// Copies the file to the other bucket
await storage
.bucket(srcBucketName)
.file(srcFilename)
.copy(copyDestination, copyOptions);
console.log(
`gs://${srcBucketName}/${srcFilename} copied to gs://${destBucketName}/${destFileName}`
);
}
copyFile().catch(console.error);
PHP
Para mais informações, consulte a documentação de referência da API Cloud Storage PHP.
use Google\Cloud\Storage\StorageClient;
/**
* Copy an object to a new name and/or bucket.
*
* @param string $bucketName The name of your Cloud Storage bucket.
* (e.g. 'my-bucket')
* @param string $objectName The name of your Cloud Storage object.
* (e.g. 'my-object')
* @param string $newBucketName The destination bucket name.
* (e.g. 'my-other-bucket')
* @param string $newObjectName The destination object name.
* (e.g. 'my-other-object')
*/
function copy_object(string $bucketName, string $objectName, string $newBucketName, string $newObjectName): void
{
$storage = new StorageClient();
$bucket = $storage->bucket($bucketName);
$object = $bucket->object($objectName);
$object->copy($newBucketName, ['name' => $newObjectName]);
printf('Copied gs://%s/%s to gs://%s/%s' . PHP_EOL,
$bucketName, $objectName, $newBucketName, $newObjectName);
}
Python
Para mais informações, consulte a documentação de referência da API Cloud Storage Python.
from google.cloud import storage
def copy_blob(
bucket_name, blob_name, destination_bucket_name, destination_blob_name,
):
"""Copies a blob from one bucket to another with a new name."""
# bucket_name = "your-bucket-name"
# blob_name = "your-object-name"
# destination_bucket_name = "destination-bucket-name"
# destination_blob_name = "destination-object-name"
storage_client = storage.Client()
source_bucket = storage_client.bucket(bucket_name)
source_blob = source_bucket.blob(blob_name)
destination_bucket = storage_client.bucket(destination_bucket_name)
# Optional: set a generation-match precondition to avoid potential race conditions
# and data corruptions. The request to copy is aborted if the object's
# generation number does not match your precondition. For a destination
# object that does not yet exist, set the if_generation_match precondition to 0.
# If the destination object already exists in your bucket, set instead a
# generation-match precondition using its generation number.
# There is also an `if_source_generation_match` parameter, which is not used in this example.
destination_generation_match_precondition = 0
blob_copy = source_bucket.copy_blob(
source_blob, destination_bucket, destination_blob_name, if_generation_match=destination_generation_match_precondition,
)
print(
"Blob {} in bucket {} copied to blob {} in bucket {}.".format(
source_blob.name,
source_bucket.name,
blob_copy.name,
destination_bucket.name,
)
)
Ruby
Para mais informações, consulte a documentação de referência da API Cloud Storage Ruby.
def copy_file source_bucket_name:, source_file_name:, destination_bucket_name:, destination_file_name:
# The ID of the bucket the original object is in
# source_bucket_name = "source-bucket-name"
# The ID of the GCS object to copy
# source_file_name = "source-file-name"
# The ID of the bucket to copy the object to
# destination_bucket_name = "destination-bucket-name"
# The ID of the new GCS object
# destination_file_name = "destination-file-name"
require "google/cloud/storage"
storage = Google::Cloud::Storage.new
bucket = storage.bucket source_bucket_name, skip_lookup: true
file = bucket.file source_file_name
destination_bucket = storage.bucket destination_bucket_name
destination_file = file.copy destination_bucket.name, destination_file_name
puts "#{file.name} in #{bucket.name} copied to " \
"#{destination_file.name} in #{destination_bucket.name}"
end
A seguir
Para pesquisar e filtrar exemplos de código de outros produtos do Google Cloud, consulte o navegador de exemplos do Google Cloud.