2

Android から Amazon s3 に画像をアップロードできます。しかし、それらは常に非公開であり、誰もそれらを表示することはできません. Amazon s3 管理コンソールで公開する必要があります。アップロード中に画像の ACL を設定できません。

Android から Amazon s3 に画像をアップロードするには、次の 2 つの方法があることを知りました。

  • PutObjectRequest の使用
  • TransferUtility.upload() の使用

私は両方を試しました。PutObjectRequest を好む場合は、AsyncTask または別のスレッドを使用する必要があります。PutObjectRequest はメイン スレッドで実行されるためです。しかし、私は AsyncTask や別のスレッドを使用したくありません。

TransferUtility を使用したいのは、メイン スレッドで実行されず、サービスで動作するため、AsyncTask や別のスレッドを使用する必要がないからです。また、転送の進行状況と状態を簡単に追跡できます。さらに、TransferUtility は PubObjectRequest よりも新しいものです。しかし、ここで問題が発生します。オブジェクトを s3 にアップロードしている間またはアップロードする前に、オブジェクトの ACL を設定する方法がわかりません。私はそれを試しました:

s3Client.setObjectAcl("myBucket", "steve_jobs.jpg", CannedAccessControlList.PublicRead);

しかし、「メインスレッドのネットワーク」エラーが返されました。したがって、AsyncTask または別のスレッドを使用する必要がありますが、AsyncTask または別のスレッドを使用したくありません。TransferUtility を使用してオブジェクトをアップロードするときに、オブジェクトの ACL を設定するにはどうすればよいですか?

4

1 に答える 1

2

バケット ポリシーは最も単純なもののようです。パスを指定するか、バケット内のすべてのオブジェクトにアクセス許可を与えることができます。AWS コンソール (バケットのプロパティ -> アクセス許可 -> バケット ポリシーの編集) または CloudBerry Explorer (バケットのプロパティ -> バケット ポリシー) を使用して設定できます。それはあなたのニーズに合っていますか?

{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::bucketname/*",
      "Condition": {}
    }
  ]
}
于 2016-02-16T13:55:05.783 に答える