Tüm Ürünler
Search
Belge Merkezi

Object Storage Service:Çok parçalı yükleme (Java SDK V1)

Son Güncelleme:Oct 01, 2026

Object Storage Service (OSS), büyük nesneler için çok parçalı yükleme özelliği sunar. Bu süreçte büyük bir nesne daha küçük parçalara bölünür, parçalar bağımsız olarak yüklenir ve ardından parçaları tek bir nesnede birleştirmek için CompleteMultipartUpload API çağrılır. Bu sayede kesintiye uğrayan yüklemelerin devam ettirilmesi mümkün olur.

Notlar

  • Bu konuda Çin (Hangzhou) bölgesinin genel uç noktası kullanılmıştır. Aynı bölgedeki diğer Alibaba Cloud hizmetlerinden OSS'e erişmek için dahili uç noktayı kullanın. Desteklenen bölgeler ve uç noktalar hakkında ayrıntılı bilgi için bkz. Bölgeler ve uç noktalar.

  • Bu konuda erişim kimlik bilgileri ortam değişkenlerinden alınmaktadır. Daha fazla bilgi için bkz. Erişim kimlik bilgilerini yapılandırma.

  • Bu konuda bir OSS uç noktası kullanarak bir OSSClient örneğinin nasıl oluşturulacağı gösterilmektedir. Özel etki alanı kullanımı veya Security Token Service (STS) kimlik bilgileriyle kimlik doğrulama gibi alternatif yapılandırmalar için bkz. İstemci yapılandırması.

  • Çok parçalı yükleme InitiateMultipartUpload, UploadPart ve CompleteMultipartUpload işlemlerini kullanır. oss:PutObject iznine sahip olmanız gerekir. RAM kullanıcıya özel erişim ilkeleri atama.

Çok parçalı yükleme süreci

Çok parçalı yükleme üç adımdan oluşur:

  1. Çok parçalı yüklemeyi başlatın.

    ossClient.initiateMultipartUpload yöntemini çağırın. OSS, genel olarak benzersiz bir yükleme ID'si döndürür.

  2. Parçaları yükleyin.

    Parça verilerini yüklemek için ossClient.uploadPart yöntemini çağırın.

    Not
    • Parça numarası, bir parçanın nesne içindeki konumunu belirler. Aynı parça numarasıyla veri yüklemek mevcut parçanın üzerine yazar.

    • OSS, alınan parça verilerinin MD5 hash değerini yanıtın ETag üstbilgisinde döndürür.

    • OSS, yüklenen verilerin MD5 hash değerini hesaplar ve SDK tarafından hesaplanan hash değeriyle karşılaştırır. Uyuşmazlık durumunda InvalidDigest hata kodu döndürülür.

  3. Çok parçalı yüklemeyi tamamlayın.

    Tüm parçalar yüklendikten sonra, parçaları eksiksiz bir nesnede birleştirmek için ossClient.completeMultipartUpload yöntemini çağırın.

Örnek kod

Aşağıdaki örnek, tam çok parçalı yükleme sürecini göstermektedir:

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.internal.Mimetypes;
import com.aliyun.oss.model.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Use the endpoint of the China (Hangzhou) region as an example. Specify the actual endpoint.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Specify the bucket name, for example, examplebucket.
        String bucketName = "examplebucket";
        // Specify the full path of the object, for example, exampledir/exampleobject.txt. The full path cannot contain the bucket name.
        String objectName = "exampledir/exampleobject.txt";
        // The path of the local file to upload.
        String filePath = "D:\\localpath\\examplefile.txt";
        // Specify the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the region to cn-hangzhou.
        String region = "cn-hangzhou";

        // Create an OSSClient instance.
        // When the OSSClient instance is no longer used, call the shutdown method to release resources.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // Create an InitiateMultipartUploadRequest object.
            InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, objectName);

            // Create an ObjectMetadata object and set the Content-Type.
            ObjectMetadata metadata = new ObjectMetadata();
            if (metadata.getContentType() == null) {
                metadata.setContentType(Mimetypes.getInstance().getMimetype(new File(filePath), objectName));
            }
            System.out.println("Content-Type: " + metadata.getContentType());

            // Bind the metadata to the upload request.
            request.setObjectMetadata(metadata);

            // Initialize the multipart upload.
            InitiateMultipartUploadResult upresult = ossClient.initiateMultipartUpload(request);
            // Return the upload ID.
            String uploadId = upresult.getUploadId();

            // partETags is a collection of PartETag objects. A PartETag object consists of the ETag and part number of a part.
            List<PartETag> partETags = new ArrayList<PartETag>();
            // The size of each part. This is used to calculate the number of parts. Unit: bytes.
            // The minimum part size is 100 KB, and the maximum part size is 5 GB. The size of the last part can be smaller than 100 KB.
            // Set the part size to 1 MB.
            final long partSize = 1 * 1024 * 1024L;   

            // Calculate the number of parts based on the size of the data to upload. The following code provides an example of how to obtain the size of the data to upload from a local file using File.length().
            final File sampleFile = new File(filePath);
            long fileLength = sampleFile.length();
            int partCount = (int) (fileLength / partSize);
            if (fileLength % partSize != 0) {
                partCount++;
            }
            // Traverse the parts and upload them.
            for (int i = 0; i < partCount; i++) {
                long startPos = i * partSize;
                long curPartSize = (i + 1 == partCount) ? (fileLength - startPos) : partSize;
                UploadPartRequest uploadPartRequest = new UploadPartRequest();
                uploadPartRequest.setBucketName(bucketName);
                uploadPartRequest.setKey(objectName);
                uploadPartRequest.setUploadId(uploadId);
                // Set the stream of the part to upload.
                // The following code provides an example of how to create a FileInputStream object from a local file and skip the specified data using the InputStream.skip() method.
                InputStream instream = new FileInputStream(sampleFile);
                instream.skip(startPos);
                uploadPartRequest.setInputStream(instream);
                // Set the part size.
                uploadPartRequest.setPartSize(curPartSize);
                // Set the part number. Each uploaded part has a part number that ranges from 1 to 10,000. If the part number is not in the range, OSS returns the InvalidArgument error code.
                uploadPartRequest.setPartNumber(i + 1);
                // Parts do not need to be uploaded in sequence. They can even be uploaded from different clients. OSS sorts the parts by part number to create a complete object.
                UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest);
                // After each part is uploaded, the OSS response includes a PartETag. The PartETag is saved in partETags.
                partETags.add(uploadPartResult.getPartETag());

                // Close the stream.
                instream.close();
            }

            // Create a CompleteMultipartUploadRequest object.
            // When you complete the multipart upload, you must provide all valid partETags. After OSS receives the submitted partETags, it verifies the validity of each part. After all parts are verified, OSS combines these parts into a complete object.
            CompleteMultipartUploadRequest completeMultipartUploadRequest =
                    new CompleteMultipartUploadRequest(bucketName, objectName, uploadId, partETags);

            // Complete the multipart upload.
            CompleteMultipartUploadResult completeMultipartUploadResult = ossClient.completeMultipartUpload(completeMultipartUploadRequest);
            System.out.println("Upload successful, ETag: " + completeMultipartUploadResult.getETag());

        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught a ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Yaygın senaryolar

Çok parçalı yüklemeyi başlatırken meta verileri ayarlayın

Çok parçalı yükleme başlatılırken meta verileri ayarlayın:

// Create an InitiateMultipartUploadRequest object.
InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, objectName);

ObjectMetadata metadata = new ObjectMetadata();
metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
// Specify the web page caching behavior of the object.
metadata.setCacheControl("no-cache");
// Specify the name of the object when it is downloaded.
metadata.setContentDisposition("attachment;filename=oss_MultipartUpload.txt");
// Specify the content encoding format of the object.
metadata.setContentEncoding(OSSConstants.DEFAULT_CHARSET_NAME);
// Specify whether to overwrite an object that has the same name when you initialize the multipart upload. In this example, this parameter is set to true, which indicates that the object that has the same name is not overwritten.
metadata.setHeader("x-oss-forbid-overwrite", "true");
// Specify the server-side encryption method used to upload each part of the object.
metadata.setHeader(OSSHeaders.OSS_SERVER_SIDE_ENCRYPTION, ObjectMetadata.KMS_SERVER_SIDE_ENCRYPTION);
// Specify the encryption algorithm of the object. If this option is not specified, the AES256 encryption algorithm is used.
metadata.setHeader(OSSHeaders.OSS_SERVER_SIDE_DATA_ENCRYPTION, ObjectMetadata.KMS_SERVER_SIDE_ENCRYPTION);
// Specify the customer master key (CMK) managed by KMS.
metadata.setHeader(OSSHeaders.OSS_SERVER_SIDE_ENCRYPTION_KEY_ID, "9468da86-3509-4f8d-a61e-6eab1eac****");
// Specify the storage class of the object.
metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard);
// Specify the object tags. You can specify multiple tags at the same time.
metadata.setHeader(OSSHeaders.OSS_TAGGING, "a:1");
request.setObjectMetadata(metadata);

// Automatically set the Content-Type based on the file. If this parameter is not set, the default Content-Type is application/octet-stream.
if (metadata.getContentType() == null) {
    metadata.setContentType(Mimetypes.getInstance().getMimetype(new File(filePath), objectName));
}

// Bind the metadata to the upload request.
request.setObjectMetadata(metadata);
// Initialize the multipart upload.
InitiateMultipartUploadResult upresult = ossClient.initiateMultipartUpload(request);

Çok parçalı yüklemeyi tamamlarken nesne erişim izinlerini ayarlayın

Çok parçalı yükleme tamamlanırken nesne erişim izinlerini ayarlayın:

completeMultipartUploadRequest.setObjectACL(CannedAccessControlList.Private);

Çok parçalı yüklemeyi tamamlarken parça ETag'lerini otomatik olarak işleyin

Çok parçalı yükleme tamamlanırken parça ETag'lerini otomatik olarak işleyin:

// Specify whether to list all parts that have been uploaded for the current upload ID. You can set partETags in CompleteMultipartUploadRequest to null to merge parts into a complete object by listing the parts on the server only if you use Java SDK 3.14.0 or later.
Map<String, String> headers = new HashMap<String, String>();
// If you specify x-oss-complete-all:yes, OSS lists all parts that have been uploaded for the current upload ID, sorts the parts by part number, and then runs the CompleteMultipartUpload operation.
// If you specify x-oss-complete-all:yes, you cannot specify the body. Otherwise, an error is reported.
headers.put("x-oss-complete-all","yes");
completeMultipartUploadRequest.setHeaders(headers);

Bir çok parçalı yükleme olayını iptal edin

Bir çok parçalı yüklemeyi iptal etmek için InitiateMultipartUpload'tan alınan yükleme ID'siyle birlikte abortMultipartUpload yöntemini çağırın. İptal işleminden sonra yükleme ID'si geçersiz hale gelir ve yüklenen tüm parçalar silinir.

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Use the endpoint of the China (Hangzhou) region as an example. Specify the actual endpoint.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Specify the bucket name, for example, examplebucket.
        String bucketName = "examplebucket";
        // Specify the full path of the object, for example, exampledir/exampleobject.txt. The full path cannot contain the bucket name.
        String objectName = "exampledir/exampleobject.txt";
        // Specify the upload ID, for example, 0004B999EF518A1FE585B0C9360D****. The upload ID is returned after the InitiateMultipartUpload operation is called to initialize the multipart upload.
        String uploadId = "0004B999EF518A1FE585B0C9360D****";
        // Specify the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the region to cn-hangzhou.
        String region = "cn-hangzhou";

        // Create an OSSClient instance.
        // When the OSSClient instance is no longer used, call the shutdown method to release resources.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();
        
        try {
            // Cancel the multipart upload.
            AbortMultipartUploadRequest abortMultipartUploadRequest =
                    new AbortMultipartUploadRequest(bucketName, objectName, uploadId);
            ossClient.abortMultipartUpload(abortMultipartUploadRequest);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Yüklenen parçaları listeleyin

InitiateMultipartUpload'tan alınan yükleme ID'siyle birlikte listParts yöntemini çağırarak yüklenen tüm parçaları listeleyin.

Yüklenen parçaları listeleme

Yüklenen parçaları listeleyin:

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Use the endpoint of the China (Hangzhou) region as an example. Specify the actual endpoint.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Specify the bucket name, for example, examplebucket.
        String bucketName = "examplebucket";
        // Specify the full path of the object, for example, exampledir/exampleobject.txt. The full path cannot contain the bucket name.
        String objectName = "exampledir/exampleobject.txt";
        // Specify the upload ID, for example, 0004B999EF518A1FE585B0C9360D****. The upload ID is returned after the InitiateMultipartUpload operation is called to initialize the multipart upload and before the CompleteMultipartUpload operation is called to complete the multipart upload.
        String uploadId = "0004B999EF518A1FE585B0C9360D****";
        // Specify the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the region to cn-hangzhou.
        String region = "cn-hangzhou";

        // Create an OSSClient instance.
        // When the OSSClient instance is no longer used, call the shutdown method to release resources.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();
        
        try {
            // List the uploaded parts.
            ListPartsRequest listPartsRequest = new ListPartsRequest(bucketName, objectName, uploadId);
            // Set the upload ID.
            //listPartsRequest.setUploadId(uploadId);
            // Set the number of parts on each page to 100 for paging. By default, 1,000 parts are listed.
            listPartsRequest.setMaxParts(100);
            // Specify the start position for the list operation. Only parts whose part numbers are greater than this parameter value are listed.
            listPartsRequest.setPartNumberMarker(2);
            PartListing partListing = ossClient.listParts(listPartsRequest);

            for (PartSummary part : partListing.getParts()) {
                // Obtain the part number.
                System.out.println(part.getPartNumber());
                // Obtain the part data size.
                System.out.println(part.getSize());
                // Obtain the ETag of the part.
                System.out.println(part.getETag());
                // Obtain the last modified time of the part.
                System.out.println(part.getLastModified());
            }
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Tüm yüklenen parçaları listeleme

listParts yöntemi her çağrıda en fazla 1.000 parça döndürür. Parça sayısı 1.000'i aştığında tüm parçaları listelemek için:

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Use the endpoint of the China (Hangzhou) region as an example. Specify the actual endpoint.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Specify the bucket name, for example, examplebucket.
        String bucketName = "examplebucket";
        // Specify the full path of the object, for example, exampledir/exampleobject.txt. The full path cannot contain the bucket name.
        String objectName = "exampledir/exampleobject.txt";
        // Specify the upload ID, for example, 0004B999EF518A1FE585B0C9360D****. The upload ID is returned after the InitiateMultipartUpload operation is called to initialize the multipart upload and before the CompleteMultipartUpload operation is called to complete the multipart upload.
        String uploadId = "0004B999EF518A1FE585B0C9360D****";
        // Specify the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the region to cn-hangzhou.
        String region = "cn-hangzhou";

        // Create an OSSClient instance.
        // When the OSSClient instance is no longer used, call the shutdown method to release resources.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();
        
        try {
            // List all uploaded parts.
            PartListing partListing;
            ListPartsRequest listPartsRequest = new ListPartsRequest(bucketName, objectName, uploadId);

            do {
                partListing = ossClient.listParts(listPartsRequest);

                for (PartSummary part : partListing.getParts()) {
                    // Obtain the part number.
                    System.out.println(part.getPartNumber());
                    // Obtain the part data size.
                    System.out.println(part.getSize());
                    // Obtain the ETag of the part.
                    System.out.println(part.getETag());
                    // Obtain the last modified time of the part.
                    System.out.println(part.getLastModified());
                }
                // Specify the start position for the list operation. Only parts whose part numbers are greater than this parameter value are listed.
                listPartsRequest.setPartNumberMarker(partListing.getNextPartNumberMarker());
            } while (partListing.isTruncated());
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Tüm yüklenen parçaları sayfalayarak listeleme

Tüm parçaları sayfalayarak listeleyin:

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Use the endpoint of the China (Hangzhou) region as an example. Specify the actual endpoint.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Specify the bucket name, for example, examplebucket.
        String bucketName = "examplebucket";
        // Specify the full path of the object, for example, exampledir/exampleobject.txt. The full path cannot contain the bucket name.
        String objectName = "exampledir/exampleobject.txt";
        // Specify the upload ID, for example, 0004B999EF518A1FE585B0C9360D****. The upload ID is returned after the InitiateMultipartUpload operation is called to initialize the multipart upload and before the CompleteMultipartUpload operation is called to complete the multipart upload.
        String uploadId = "0004B999EF518A1FE585B0C9360D****";
        // Specify the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the region to cn-hangzhou.
        String region = "cn-hangzhou";

        // Create an OSSClient instance.
        // When the OSSClient instance is no longer used, call the shutdown method to release resources.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();
        
        try {
            // List the uploaded parts by page.
            PartListing partListing;
            ListPartsRequest listPartsRequest = new ListPartsRequest(bucketName, objectName, uploadId);
            // Set the number of parts to list on each page to 100 for paginated listing.
            listPartsRequest.setMaxParts(100);

            do {
                partListing = ossClient.listParts(listPartsRequest);

                for (PartSummary part : partListing.getParts()) {
                    // Obtain the part number.
                    System.out.println(part.getPartNumber());
                    // Obtain the part data size.
                    System.out.println(part.getSize());
                    // Obtain the ETag of the part.
                    System.out.println(part.getETag());
                    // Obtain the last modified time of the part.
                    System.out.println(part.getLastModified());
                }

                listPartsRequest.setPartNumberMarker(partListing.getNextPartNumberMarker());

            } while (partListing.isTruncated());
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}                    

Çok parçalı yükleme olaylarını listeleyin

Devam eden çok parçalı yükleme olaylarını (başlatılmış ancak henüz tamamlanmamış veya iptal edilmemiş) listelemek için listMultipartUploads yöntemini çağırın. Aşağıdaki tabloda yapılandırılabilir parametreler açıklanmaktadır.

Parametre

İşlev

Yapılandırma Yöntemleri

prefix

Yalnızca adları belirtilen ön ekle başlayan nesneleri döndürür. Döndürülen nesne adları ön eki içermeye devam eder.

ListMultipartUploadsRequest.setPrefix(String prefix)

delimiter

Nesne adlarını gruplar. Belirtilen ön eki içeren ve sınırlayıcı karakterler arasında görünen nesne adları tek bir öğe olarak gruplanır.

ListMultipartUploadsRequest.setDelimiter(String delimiter)

maxUploads

Döndürülecek maksimum çok parçalı yükleme olayı sayısı. Varsayılan ve maksimum değer: 1.000.

ListMultipartUploadsRequest.setMaxUploads(Integer maxUploads)

keyMarker

Adları sözlüksel olarak keyMarker'dan sonra gelen nesneler için çok parçalı yükleme olaylarını listeler. Başlangıç konumunu ayarlamak için uploadIdMarker ile birlikte kullanılır.

ListMultipartUploadsRequest.setKeyMarker(String keyMarker)

uploadIdMarker

Başlangıç konumunu ayarlamak için keyMarker ile birlikte kullanılır. keyMarker ayarlanmadığında geçersizdir. keyMarker ayarlandığında sonuçlar şunları içerir:

  • Adları sözlüksel olarak keyMarker'dan sonra gelen nesneler.

  • keyMarker ile eşleşen ve uploadIdMarker'dan sonra gelen yükleme ID'lerine sahip nesneler için çok parçalı yükleme olayları.

ListMultipartUploadsRequest.setUploadIdMarker(String uploadIdMarker)

Çok parçalı yükleme olaylarını listeleme

Çok parçalı yükleme olaylarını listeleyin:

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Use the endpoint of the China (Hangzhou) region as an example. Specify the actual endpoint.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Specify the bucket name, for example, examplebucket.
        String bucketName = "examplebucket";
        // Specify the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the region to cn-hangzhou.
        String region = "cn-hangzhou";

        // Create an OSSClient instance.
        // When the OSSClient instance is no longer used, call the shutdown method to release resources.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();
        
        try {
            // List multipart upload events. By default, 1,000 parts are listed.
            ListMultipartUploadsRequest listMultipartUploadsRequest = new ListMultipartUploadsRequest(bucketName);
            MultipartUploadListing multipartUploadListing = ossClient.listMultipartUploads(listMultipartUploadsRequest);

            for (MultipartUpload multipartUpload : multipartUploadListing.getMultipartUploads()) {
                // Obtain the upload ID.
                System.out.println(multipartUpload.getUploadId());
                // Obtain the key.
                System.out.println(multipartUpload.getKey());
                // Obtain the initialization time of the multipart upload.
                System.out.println(multipartUpload.getInitiated());
            }
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

isTruncated true olduğunda, nextKeyMarker ve nextUploadIdMarker bir sonraki liste isteği için başlangıç noktasını belirtir ve bu sayede sayfalandırılmış veri alımı mümkün olur.

Tüm çok parçalı yükleme olaylarını listeleme

listMultipartUploads yöntemi her çağrıda en fazla 1.000 olay döndürür. Olay sayısı 1.000'i aştığında tüm olayları listelemek için:

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Use the endpoint of the China (Hangzhou) region as an example. Specify the actual endpoint.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Specify the bucket name, for example, examplebucket.
        String bucketName = "examplebucket";
        // Specify the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the region to cn-hangzhou.
        String region = "cn-hangzhou";

        // Create an OSSClient instance.
        // When the OSSClient instance is no longer used, call the shutdown method to release resources.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();
        
        try {
            // List multipart upload events.
            MultipartUploadListing multipartUploadListing;
            ListMultipartUploadsRequest listMultipartUploadsRequest = new ListMultipartUploadsRequest(bucketName);

            do {
                multipartUploadListing = ossClient.listMultipartUploads(listMultipartUploadsRequest);

                for (MultipartUpload multipartUpload : multipartUploadListing.getMultipartUploads()) {
                    // Obtain the upload ID.
                    System.out.println(multipartUpload.getUploadId());
                    // Obtain the key.
                    System.out.println(multipartUpload.getKey());
                    // Obtain the initialization time of the multipart upload.
                    System.out.println(multipartUpload.getInitiated());
                }

                listMultipartUploadsRequest.setKeyMarker(multipartUploadListing.getNextKeyMarker());

                listMultipartUploadsRequest.setUploadIdMarker(multipartUploadListing.getNextUploadIdMarker());
            } while (multipartUploadListing.isTruncated());
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Tüm yükleme olaylarını sayfalayarak listeleme

Tüm yükleme olaylarını sayfalayarak listeleyin:

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Use the endpoint of the China (Hangzhou) region as an example. Specify the actual endpoint.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Specify the bucket name, for example, examplebucket.
        String bucketName = "examplebucket";
        // Specify the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the region to cn-hangzhou.
        String region = "cn-hangzhou";

        // Create an OSSClient instance.
        // When the OSSClient instance is no longer used, call the shutdown method to release resources.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();
        
        try {
            // List multipart upload events.
            MultipartUploadListing multipartUploadListing;
            ListMultipartUploadsRequest listMultipartUploadsRequest = new ListMultipartUploadsRequest(bucketName);
            // Set the number of multipart upload events to list on each page.
            listMultipartUploadsRequest.setMaxUploads(50);

            do {
                multipartUploadListing = ossClient.listMultipartUploads(listMultipartUploadsRequest);

                for (MultipartUpload multipartUpload : multipartUploadListing.getMultipartUploads()) {
                    // Obtain the upload ID.
                    System.out.println(multipartUpload.getUploadId());
                    // Obtain the key.
                    System.out.println(multipartUpload.getKey());
                    // Obtain the initialization time of the multipart upload.
                    System.out.println(multipartUpload.getInitiated());
                }

                listMultipartUploadsRequest.setKeyMarker(multipartUploadListing.getNextKeyMarker());
                listMultipartUploadsRequest.setUploadIdMarker(multipartUploadListing.getNextUploadIdMarker());

            } while (multipartUploadListing.isTruncated());
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Ağ akışları veya veri akışları için çok parçalı yükleme gerçekleştirin

Bu konudaki örnekler yerel dosyalar kullanmaktadır. Ağ akışlarını veya veri akışlarını yüklemek için Veri akışının çok parçalı yüklenmesi bölümüne bakın.

İlgili kaynaklar