我希望开发一个Singletone AmazonS3Client,它可以为我的应用程序提供上传文件到Amazon S3服务器的功能。但是,我无法找到如何检查连接是否有效以及是否能够上传存储桶。
是否存在特定的异常,如果连接断开将被抛出?或者在一段时间后连接是否会被丢弃?
任何答案都会有所帮助。
这是我的代码片段:
private static final AmazonS3Client s3Client;
static {
AWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
s3Client = new AmazonS3Client(awsCredentials);
}
private static boolean writeFile(AmazonS3Client s3Client, String fileName, File file, Boolean publicRead){
try {
PutObjectRequest p = new PutObjectRequest(bucketName, fileName, file);
if (publicRead)
p.setCannedAcl(CannedAccessControlList.PublicRead);
s3Client.putObject(p);
System.out.println("URL: " + S3_BASE_URL + fileName);
return true;
} catch (AmazonServiceException ase){
ase.printStackTrace();
} catch (AmazonClientException ace) {
ace.printStackTrace();
} catch (Exception ex){
ex.printStackTrace();
} catch (Throwable e) {
e.printStackTrace();
}
return false;
}
答案 0 :(得分:3)
(function barrel() {
var css = document.createElement('style');
css.type = 'text/css';
css.innerHTML = '@-moz-keyframes roll{100%25{-moz-transform:rotate(360deg);}}@-o-keyframes roll{100%25{-o-transform:rotate(360deg);}}@-webkit-keyframes roll{100%25{-webkit-transform:rotate(360deg);}}body{-moz-animation-name:roll;-moz-animation-duration:4s;-moz-animation-iteration-count:1;-o-animation-name:roll;-o-animation-duration:4s;-o-animation-iteration-count:1;-webkit-animation-name:roll;-webkit-animation-duration:4s;-webkit-animation-iteration-count:1;}';
document.getElementsByTagName('head')[0].appendChild(css)
return css.innerHTML;
})();
如果bucketList大小为null,则连接不活动
答案 1 :(得分:2)
以防万一其他人遇到我偶然遇到的相同问题,我会发布到目前为止的经验。
我尝试过:
s3Client.doesBucketExist("my-bucket")
因为它更适合我的需求,因为我不需要列出存储桶中的所有对象,而只是想知道输入的存储桶名称是否正确以及凭据(s3访问密钥ID和s3秘密访问)键)是正确的。
以这种方式工作的存储桶名称检查将返回true或false,无论存储桶是否存在,但如果凭据错误,它将始终返回true,这使该检查非常无用。
此处描述的错误:
https://forums.aws.amazon.com/thread.jspa?threadID=77397
所以我最终在AWS控制台的IAM中添加了“ ListBucket”权限,并使用
s3Client.listBuckets();
因为这将失败,并且如果出现
否则它将起作用。
最终代码:
try {
final AmazonS3Client s3Client = new AmazonS3Client(new BasicAWSCredentials(s3AccessKeyId, s3SecretAccessKey));
s3Client.listObjects(s3Bucket);
return true;
} catch (Exception ex) {
return false;
}