我正在使用Android projet,我使用Amazon Web Services(AWS)来存储文件。我有这个:
AmazonS3Client s3Client = new AmazonS3Client( new BasicAWSCredentials(myId, myKey) );
s3Client.putObject( new PutObjectRequest(myBucketName, myObjectKey, myFile) );
它已被证明是成功的,因为我可以看到亚马逊数据库中的文件。我想知道的是我是否能获得成功。我希望能够在上传成功时执行代码,否则执行其他代码。有什么建议吗?
答案 0 :(得分:2)
根据AWS S3 JavaDoc:
Amazon S3从不存储部分对象;如果在此调用期间未抛出异常,则存储整个对象。
因此,成功返回的PutObjectResult对象表示调用成功(即上传了对象)。如果存在权限错误,则将抛出AmazonServiceException:
AmazonServiceException - 如果在处理请求时Amazon S3中发生任何错误。
编辑1 在以上评论中引用的答案中(建议OP下载刚刚上传的文件并将下载的副本与原始文件进行比较),您基本上只需付费上传和下载,我认为对大多数用例来说都是过度杀伤。相反,使用PutObjectResult类中提供的信息,只需验证是否存在该信息作为成功上载的证据。这不是确切的确认,但如果没有抛出异常,你可能很好地依赖S3的成功保证。
请记住上传文件与流的下列限制。
上传文件时:
客户端自动计算文件的校验和。亚马逊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)