2016-03-01 76 views
0

我正在使用Amazon Web Services(AWS)存储文件的Android项目中工作。我有这个:如何使用Amazon Web Services获取上传成功状态?

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

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

+0

退房http://stackoverflow.com/questions/5922724/amazons3-how-to-check-if-the-upload-succeeded。 – jbird

回答

1

按照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

亚马逊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

在上传的文件:

  • 客户机自动计算该文件的校验和。 Amazon S3 使用校验和验证每个文件中的数据。

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

当从输入流直接上传:

  • 小心直接发送流之前设置在所述元数据对象 正确的内容类型。与文件上传不同,来自输入流的内容类型 无法自动确定。如果主叫方 未明确设置内容类型,则不会在Amazon S3中设置。

  • 必须指定内容长度,然后才能将数据上传到Amazon S3。 Amazon S3明确要求在 请求标头中接收任何数据之前发送内容长度。如果 调用方不提供长度,则库必须缓冲输入流的 内容以便计算它。

相关问题