如何检查AmazonS3Client连接是否处于活动状态

时间:2014-12-07 10:55:27

标签: java amazon-s3 singleton client

我希望开发一个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;
}

2 个答案:

答案 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();

因为这将失败,并且如果出现

  • 存储桶不存在
  • 访问密钥ID无效
  • 秘密访问密钥无效

否则它将起作用。

最终代码:

 try {
        final AmazonS3Client s3Client = new AmazonS3Client(new BasicAWSCredentials(s3AccessKeyId, s3SecretAccessKey));
        s3Client.listObjects(s3Bucket);
        return true;
    } catch (Exception ex) {
        return false;
    }