如何自动下载整个S3存储桶

时间:2016-05-23 13:22:12

标签: android amazon-web-services

我能够成功从aws s3存储桶下载所有文件,因此当我点击特定列表项时,列表项会下载。但是,我希望在启动活动时自动下载所有s3桶项目。

/**

* DownloadSelectionActivity显示存储桶中的文件列表。用户可以  *选择要下载的文件。  * / 公共类DownloadSelectionActivity扩展了ListActivity {

// The S3 client used for getting the list of objects in the bucket
private AmazonS3Client s3;
// An adapter to show the objects
private SimpleAdapter simpleAdapter;
private ArrayList<HashMap<String, Object>> transferRecordMaps;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_download_selection);
    initData();
    initUI();
}

@Override
protected void onResume() {
    super.onResume();
    // Refresh the file list.
    new GetFileListTask().execute();
}

private void initData() {
    // Gets the default S3 client.
    s3 = Util.getS3Client(DownloadSelectionActivity.this);
    transferRecordMaps = new ArrayList<HashMap<String, Object>>();
}

private void initUI() {
    simpleAdapter = new SimpleAdapter(this, transferRecordMaps,
            R.layout.bucket_item, new String[] {
                    "key"
            },
            new int[] {
                    R.id.key
            });
    simpleAdapter.setViewBinder(new ViewBinder() {
        @Override
        public boolean setViewValue(View view, Object data,
                String textRepresentation) {
            switch (view.getId()) {
                case R.id.key:
                    TextView fileName = (TextView) view;
                    fileName.setText((String) data);
                    return true;
            }
            return false;
        }
    });

    // When an item is selected, finish the activity and pass back the S3
    // key associated with the object selected
    getListView().setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(final AdapterView<?> adapterView, View view, int pos, long id) {
            Intent intent = new Intent();
            intent.putExtra("key", (String) transferRecordMaps.get(pos).get("key"));
            setResult(RESULT_OK, intent);
            finish();


        }
    });

}






/**
 * This async task queries S3 for all files in the given bucket so that they
 * can be displayed on the screen
 */
private class GetFileListTask extends AsyncTask<Void, Void, Void> {
    // The list of objects we find in the S3 bucket
    private List<S3ObjectSummary> s3ObjList;
    // A dialog to let the user know we are retrieving the files
    private ProgressDialog dialog;

    @Override
    protected void onPreExecute() {
        dialog = ProgressDialog.show(DownloadSelectionActivity.this,
                getString(R.string.refreshing),
                getString(R.string.please_wait));
    }

    @Override
    protected Void doInBackground(Void... inputs) {
        // Queries files in the bucket from S3.
        s3ObjList = s3.listObjects(Constants.BUCKET_NAME).getObjectSummaries();
        transferRecordMaps.clear();
        for (S3ObjectSummary summary : s3ObjList) {
            HashMap<String, Object> map = new HashMap<String, Object>();
            map.put("key", summary.getKey());
            transferRecordMaps.add(map);
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        dialog.dismiss();
        simpleAdapter.notifyDataSetChanged();
    }
}

}

1 个答案:

答案 0 :(得分:1)

您已经拥有了存储桶中的对象列表,您可以在列表操作完成后遍历列表并下载每个对象。使用Transfer Utility可以更容易地处理传输(允许暂停/恢复,检查状态等等),这是标准S3客户端之上的高级实用程序。

可以在此处找到转移实用程序的指南(http://docs.aws.amazon.com/mobile/sdkforandroid/developerguide/s3transferutility.html