Amazon Simple Storage Service
开发人员指南 (API Version 2006-03-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

使用AWS SDK for Java删除对象

以下任务将引导您使用AWS SDK for Java类来删除对象。

删除对象 (不受版本控制的存储桶)

1

创建 AmazonS3Client 类的实例。

2

执行 AmazonS3Client.deleteObject 方法之一。

您可以提供存储桶名称和对象名称作为参数,或在 DeleteObjectRequest 对象中提供相同的信息,然后作为参数传递对象。

如果您没有对存储桶启用版本控制,该操作将删除对象。如果您已启用了版本控制,该操作将添加一个删除标记。有关更多信息,请参阅 每个请求删除一个对象。

下面的 Java 示例将演示上述步骤。该示例使用 DeleteObjectRequest 类来提供存储桶名称和对象键。

AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider()); s3client.deleteObject(new DeleteObjectRequest(bucketName, keyName));

删除对象的特定版本 (受版本控制的存储桶)

1

创建 AmazonS3Client 类的实例。

2

执行 AmazonS3Client.deleteVersion 方法之一。

您可以直接提供存储桶名称和对象键作为参数,或使用 DeleteVersionRequest 来提供相同的信息。

下面的 Java 示例将演示上述步骤。该示例使用 DeleteVersionRequest 类来提供存储桶名称、对象键和版本 ID。

AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider()); s3client.deleteObject(new DeleteVersionRequest(bucketName, keyName, versionId));

例 1:删除对象 (不受版本控制的存储桶)

下面的 Java 示例将从存储桶删除对象。如果您没有对存储桶启用版本控制,Amazon S3 将删除对象。如果您已启用了版本控制,Amazon S3 将添加一个删除标记并且不会删除对象。有关如何创建和测试有效示例的信息,请参阅 测试 Java 代码示例

import java.io.IOException; import com.amazonaws.AmazonClientException; import com.amazonaws.AmazonServiceException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.DeleteObjectRequest; public class DeleteAnObjectNonVersionedBucket { private static String bucketName = "*** Provide a Bucket Name ***"; private static String keyName = "*** Provide a Key Name ****"; public static void main(String[] args) throws IOException { AmazonS3 s3Client = new AmazonS3Client(new ProfileCredentialsProvider()); try { s3Client.deleteObject(new DeleteObjectRequest(bucketName, keyName)); } catch (AmazonServiceException ase) { System.out.println("Caught an AmazonServiceException."); System.out.println("Error Message: " + ase.getMessage()); System.out.println("HTTP Status Code: " + ase.getStatusCode()); System.out.println("AWS Error Code: " + ase.getErrorCode()); System.out.println("Error Type: " + ase.getErrorType()); System.out.println("Request ID: " + ase.getRequestId()); } catch (AmazonClientException ace) { System.out.println("Caught an AmazonClientException."); System.out.println("Error Message: " + ace.getMessage()); } } }

例 2:删除对象 (受版本控制的存储桶)

下面的 Java 示例将从受版本控制的存储桶删除对象的特定版本。deleteObject 请求将从存储桶删除特定的对象版本。

要测试此示例,您必须提供存储桶名称。该代码示例将执行以下操作:

  1. 对存储桶启用版本控制功能。

  2. 向存储桶添加示例对象。作为响应,Amazon S3 将返回新添加的对象的版本 ID。

  3. 使用 deleteVersion 方法删除示例对象。DeleteVersionRequest 类将指定对象键名称和版本 ID。

有关如何创建和测试有效示例的信息,请参阅 测试 Java 代码示例

import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.Random; import com.amazonaws.AmazonClientException; import com.amazonaws.AmazonServiceException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.BucketVersioningConfiguration; import com.amazonaws.services.s3.model.CannedAccessControlList; import com.amazonaws.services.s3.model.DeleteVersionRequest; import com.amazonaws.services.s3.model.ObjectMetadata; import com.amazonaws.services.s3.model.PutObjectRequest; import com.amazonaws.services.s3.model.PutObjectResult; import com.amazonaws.services.s3.model.SetBucketVersioningConfigurationRequest; public class DeleteAnObjectVersionEnabledBucket { static String bucketName = "*** Provide a Bucket Name ***"; static String keyName = "*** Provide a Key Name ****"; static AmazonS3Client s3Client; public static void main(String[] args) throws IOException { s3Client = new AmazonS3Client(new ProfileCredentialsProvider()); try { // Make the bucket version-enabled. enableVersioningOnBucket(s3Client, bucketName); // Add a sample object. String versionId = putAnObject(keyName); s3Client.deleteVersion( new DeleteVersionRequest( bucketName, keyName, versionId)); } catch (AmazonServiceException ase) { System.out.println("Caught an AmazonServiceException."); System.out.println("Error Message: " + ase.getMessage()); System.out.println("HTTP Status Code: " + ase.getStatusCode()); System.out.println("AWS Error Code: " + ase.getErrorCode()); System.out.println("Error Type: " + ase.getErrorType()); System.out.println("Request ID: " + ase.getRequestId()); } catch (AmazonClientException ace) { System.out.println("Caught an AmazonClientException."); System.out.println("Error Message: " + ace.getMessage()); } } static void enableVersioningOnBucket(AmazonS3Client s3Client, String bucketName) { BucketVersioningConfiguration config = new BucketVersioningConfiguration() .withStatus(BucketVersioningConfiguration.ENABLED); SetBucketVersioningConfigurationRequest setBucketVersioningConfigurationRequest = new SetBucketVersioningConfigurationRequest( bucketName, config); s3Client.setBucketVersioningConfiguration(setBucketVersioningConfigurationRequest); } static String putAnObject(String keyName) { String content = "This is the content body!"; String key = "ObjectToDelete-" + new Random().nextInt(); ObjectMetadata metadata = new ObjectMetadata(); metadata.setHeader("Subject", "Content-As-Object"); metadata.setHeader("Content-Length", content.length()); PutObjectRequest request = new PutObjectRequest(bucketName, key, new ByteArrayInputStream(content.getBytes()), metadata) .withCannedAcl(CannedAccessControlList.AuthenticatedRead); PutObjectResult response = s3Client.putObject(request); return response.getVersionId(); } }