Help us understand the problem. What is going on with this article?

【AWS・S3】 結局、複数ファイルのアップロードはどうやるの?

More than 1 year has passed since last update.

【発端】
自作Androidアプリで作成したファイル(一度に複数生成される。)を
サーバーで管理して、別端末で受け取る必要が出てきたので、
MobileHubからのS3で取り急ぎ実装。

【つまづき】
・s3Clientを指定して!
 というエラーが出る。
・AWS S3 Access Denied
 というエラーが出る。
・同期処理のなかでサーバーとやり取りしないで!
 というエラーが出る。
・複数ファイルのアップロードをどうしたら実装できるのか
 チュートリアルには書かれていない。
・一旦実装したものの、s3Clientを呼び出す所で度々エラーが起きる

似たような悩みを持っていた人たち。
AWS S3 Java SDK - Access Denied
Amazon s3 upload multiple files android

【解決】

class AsyncAWS_upload extends AsyncTask<String, Void, String> {

    Activity BaseActivity;

    AsyncAWS_upload(Activity activity) {
        this.BaseActivity = activity;
    }

    @Override
    protected String doInBackground(String... strings) {
        uploadData();
        return null;
    }

    public void uploadData() {

       TransferUtility transferUtility =
                TransferUtility.builder()
                        .context(getApplicationContext())
                        .awsConfiguration(AWSMobileClient.getInstance().getConfiguration())
                        .s3Client(new AmazonS3Client(AWSMobileClient.getInstance().getCredentialsProvider()))
                        .build();


        TransferObserver uploadObserver =
                transferUtility.upload(
                        "protected/hoge.file",
                        new File(Environment.getExternalStorageDirectory() + "/hoge.file"));

               transferUtility.upload(
                        "hogehoge_test/hoge.csv",
                        new File(Environment.getExternalStorageDirectory() + "/hoge.csv"));

        uploadObserver.setTransferListener(new TransferListener() {
            @Override
            public void onStateChanged(int id, TransferState state) {
                if (TransferState.COMPLETED == state) {
                    LOGD("XXXTransferStateonStateChanged", "FINISH");
                    // Handle a completed upload.
                }
            }

            @Override
            public void onProgressChanged(
                    int id, long bytesCurrent, long bytesTotal) {
                LOGD("XXXTransferStateonProgressChanged", "HERE");
                // TODO Auto-generated method stub
            }

            @Override
            public void onError(int id, Exception ex) {
                // TODO Auto-generated method stub
                LOGD("XXXTransferStateonError", String.valueOf(ex));
            }

        });

        // If your upload does not trigger the onStateChanged method inside your
        // TransferListener, you can directly check the transfer state as shown here.
        if (TransferState.COMPLETED == uploadObserver.getState()) {
        }
    }
}

・s3Clientを指定してあげる。(コードは公式のものを使用)
・buold.gradeleには
compile ('com.amazonaws:aws-android-sdk-mobile-client:2.6.+@aar') { transitive = true; }
と正しく記載しないと、com.amazonaws.mobile.client.AWSMobileClient
が読み込まれません。
・バゲットへのアクセス権限をホスト側で設定変更。
・非同期処理のためのサブクラスをつくり、メインクラスから実行させる。
・transferUtilityに複数のアップロード情報を持たせる。

で動くように。
細かい部分の理解は飛ばしてしまっているので、ドキュメントを確認次第補足します。
英文ドキュメントありがとう。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした