

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Copia di un oggetto utilizzando il caricamento in più parti
<a name="CopyingObjectsMPUapi"></a>

Il caricamento multiparte consente di copiare oggetti su un insieme di parti. Gli esempi in questa sezione mostrano come copiare oggetti con dimensioni superiori a 5 GB utilizzando l'API per il caricamento in più parti. Per informazioni sui caricamenti multiparte, consulta [Caricamento e copia di oggetti utilizzando il caricamento multiparte in Amazon S3](mpuoverview.md).

È possibile copiare oggetti inferiori a 5 GB in una singola operazione senza utilizzare l'API di caricamento multiparte. Puoi copiare oggetti di dimensioni inferiori a 5 GB utilizzando l'API Console di gestione AWS, AWS CLI, REST o. AWS SDKs Per ulteriori informazioni, consulta [Copia, spostamento e denominazione di oggetti](copy-object.md). 

Per una end-to-end procedura sul caricamento di un oggetto con caricamento in più parti con un checksum aggiuntivo, consulta. [Esercitazione: caricamento di un oggetto tramite caricamento multiparte per verificarne l'integrità dei dati](tutorial-s3-mpu-additional-checksums.md)

La sezione seguente mostra come copiare un oggetto con caricamento in più parti con l'API REST o. AWS SDKs

## Utilizzo della REST API
<a name="CopyingObjctsUsingRESTMPUapi"></a>

Le sezioni seguenti della *Documentazione di riferimento delle API di Amazon Simple Storage Service* descrivono REST API per il caricamento in più parti. Per copiare un oggetto esistente, utilizza l'API Upload Part (Copy) e specifica l'oggetto di origine aggiungendo l'intestazione `x-amz-copy-source` nella richiesta. 
+ [Avvio del caricamento in più parti](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html)
+ [Upload Part](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadUploadPart.html)
+ [Upload Part (Copy)](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadUploadPartCopy.html)
+ [Completamento del caricamento in più parti](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadComplete.html)
+ [Abort Multipart Upload](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadAbort.html)
+ [List Parts](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadListParts.html)
+ [Elenco dei caricamenti in più parti](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadListMPUpload.html)

Puoi usarli APIs per creare le tue richieste REST oppure puoi utilizzare una delle SDKs nostre. Per ulteriori informazioni sull'utilizzo di Multipart Upload con AWS CLI, consulta[Utilizzando il AWS CLI](mpu-upload-object.md#UsingCLImpUpload). Per ulteriori informazioni su SDKs, vedere[AWS Supporto SDK per il caricamento in più parti](mpuoverview.md#sdksupportformpu).

## Utilizzando il AWS SDKs
<a name="copy-object-mpu-sdks"></a>

Per copiare un oggetto utilizzando l'API di basso livello, effettua le seguenti operazioni:
+ Avvia il caricamento in più parti chiamando il metodo `AmazonS3Client.initiateMultipartUpload()`.
+ Salvare l'ID caricamento dall'oggetto della risposta restituito dal metodo `AmazonS3Client.initiateMultipartUpload()`. Si fornisce questo ID di caricamento per ciascuna operazione di caricamento di parte.
+ Copia tutte le parti. Per ciascuna parte che è necessario copiare, creare una nuova istanza della classe `CopyPartRequest`. Fornisci le informazioni sulla parte, inclusi i nomi bucket di origine e destinazione, le chiavi dell'oggetto di origine e destinazione, l'ID di caricamento, le posizioni dei primi e degli ultimi byte della parte e il numero della parte. 
+ Salva le risposte che il metodo `AmazonS3Client.copyPart()` chiama. Ogni risposta include il valore `ETag` e il numero della parte per la parte caricata. Tali informazioni saranno necessarie per completare il caricamento in più parti. 
+ Chiama il metodo `AmazonS3Client.completeMultipartUpload()` per completare l'operazione di copia. 

------
#### [ Java ]

Per esempi su come copiare oggetti utilizzando il caricamento in più parti con l' AWS SDK for Java, [consulta Copiare parte di un oggetto da un altro oggetto](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_UploadPartCopy_section.html) nel riferimento alle API di *Amazon S3*.

------
#### [ .NET ]

Il seguente esempio in C\$1 mostra come utilizzare SDK per .NET per copiare un oggetto Amazon S3 di dimensioni superiori a 5 GB da una posizione di origine a un'altra, ad esempio da un bucket all'altro. Per copiare gli oggetti con dimensioni inferiori a 5 GB, utilizza la procedura di copia in una sola operazione come descritto in [Usando il AWS SDKs](copy-object.md#CopyingObjectsUsingSDKs). Per ulteriori informazioni sui caricamenti in più parti di Amazon S3, consulta [Caricamento e copia di oggetti utilizzando il caricamento multiparte in Amazon S3](mpuoverview.md).

Questo esempio mostra come copiare un oggetto Amazon S3 di dimensioni superiori a 5 GB da un bucket S3 a un altro utilizzando l' SDK per .NET API di caricamento multipart.

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class CopyObjectUsingMPUapiTest
    {
        private const string sourceBucket = "*** provide the name of the bucket with source object ***";
        private const string targetBucket = "*** provide the name of the bucket to copy the object to ***";
        private const string sourceObjectKey = "*** provide the name of object to copy ***";
        private const string targetObjectKey = "*** provide the name of the object copy ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; 
        private static IAmazonS3 s3Client;

        public static void Main()
        {
            s3Client = new AmazonS3Client(bucketRegion);
            Console.WriteLine("Copying an object");
            MPUCopyObjectAsync().Wait();
        }
        private static async Task MPUCopyObjectAsync()
        {
            // Create a list to store the upload part responses.
            List<UploadPartResponse> uploadResponses = new List<UploadPartResponse>();
            List<CopyPartResponse> copyResponses = new List<CopyPartResponse>();

            // Setup information required to initiate the multipart upload.
            InitiateMultipartUploadRequest initiateRequest =
                new InitiateMultipartUploadRequest
                {
                    BucketName = targetBucket,
                    Key = targetObjectKey
                };

            // Initiate the upload.
            InitiateMultipartUploadResponse initResponse =
                await s3Client.InitiateMultipartUploadAsync(initiateRequest);

            // Save the upload ID.
            String uploadId = initResponse.UploadId;

            try
            {
                // Get the size of the object.
                GetObjectMetadataRequest metadataRequest = new GetObjectMetadataRequest
                {
                    BucketName = sourceBucket,
                    Key = sourceObjectKey
                };

                GetObjectMetadataResponse metadataResponse =
                    await s3Client.GetObjectMetadataAsync(metadataRequest);
                long objectSize = metadataResponse.ContentLength; // Length in bytes.

                // Copy the parts.
                long partSize = 5 * (long)Math.Pow(2, 20); // Part size is 5 MB.

                long bytePosition = 0;
                for (int i = 1; bytePosition < objectSize; i++)
                {
                    CopyPartRequest copyRequest = new CopyPartRequest
                    {
                        DestinationBucket = targetBucket,
                        DestinationKey = targetObjectKey,
                        SourceBucket = sourceBucket,
                        SourceKey = sourceObjectKey,
                        UploadId = uploadId,
                        FirstByte = bytePosition,
                        LastByte = bytePosition + partSize - 1 >= objectSize ? objectSize - 1 : bytePosition + partSize - 1,
                        PartNumber = i
                    };

                    copyResponses.Add(await s3Client.CopyPartAsync(copyRequest));

                    bytePosition += partSize;
                }

                // Set up to complete the copy.
                CompleteMultipartUploadRequest completeRequest =
                new CompleteMultipartUploadRequest
                {
                    BucketName = targetBucket,
                    Key = targetObjectKey,
                    UploadId = initResponse.UploadId
                };
                completeRequest.AddPartETags(copyResponses);

                // Complete the copy.
                CompleteMultipartUploadResponse completeUploadResponse = 
                    await s3Client.CompleteMultipartUploadAsync(completeRequest);
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }
        }
    }
}
```

------