如何通过Amazon Web Services获得上传成功状态?

时间:2016-03-01 15:56:02

标签: android amazon-web-services

我正在使用Android projet,我使用Amazon Web Services(AWS)来存储文件。我有这个:

AmazonS3Client s3Client = new AmazonS3Client( new BasicAWSCredentials(myId, myKey) );
s3Client.putObject( new PutObjectRequest(myBucketName, myObjectKey, myFile) );

它已被证明是成功的,因为我可以看到亚马逊数据库中的文件。我想知道的是我是否能获得成功。我希望能够在上传成功时执行代码,否则执行其他代码。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

根据AWS S3 JavaDoc:

http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html#putObject%28com.amazonaws.services.s3.model.PutObjectRequest%29

  

Amazon S3从不存储部分对象;如果在此调用期间未抛出异常,则存储整个对象。

因此,成功返回的PutObjectResult对象表示调用成功(即上传了对象)。如果存在权限错误,则将抛出AmazonServiceException:

  

AmazonServiceException - 如果在处理请求时Amazon S3中发生任何错误。

编辑1 在以上评论中引用的答案中(建议OP下载刚刚上传的文件并将下载的副本与原始文件进行比较),您基本上只需付费上传和下载,我认为对大多数用例来说都是过度杀伤。相反,使用PutObjectResult类中提供的信息,只需验证是否存在该信息作为成功上载的证据。这不是确切的确认,但如果没有抛出异常,你可能很好地依赖S3的成功保证。

请记住上传文件与流的下列限制。

http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html#putObject%28com.amazonaws.services.s3.model.PutObjectRequest%29

  

上传文件时:

     
      
  • 客户端自动计算文件的校验和。亚马逊S3   使用校验和来验证每个文件中的数据。

  •   
  • 使用文件扩展名,Amazon S3会尝试确定正确的文件   用于对象的内容类型和内容处置。

  •   
     

直接从输入流上传时:

     
      
  • 请注意在元数据对象中设置正确的内容类型   在直接发送流之前。与文件上传,内容类型不同   来自输入流无法自动确定。如果是来电者   没有明确设置内容类型,它不会在亚马逊中设置   S3。

  •   
  • 必须先指定内容长度,然后才能将数据上传到亚马逊   S3。 Amazon S3明确要求发送内容长度   它之前的请求标头将接受任何数据。如果   调用者没有提供长度,库必须缓冲   输入流的内容以便计算它。

  •   

答案 1 :(得分:0)

如果上传过程中出现错误,您将收到异常。 putObject方法返回带有新上传文件属性的PutObjectResult对象。

SDK:http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html#putObject(java.lang.String,java.lang.String,java.io.File)