aws云服务文档
https://aws.amazon.com/cn/documentation/s3/
aws云服务实例代码
https://github.com/awslabs/aws-sdk-android-samples
api
https://docs.aws.amazon.com/AWSAndroidSDK/latest/javadoc/
1、添加依赖
dependencies {
compile 'com.amazonaws:aws-android-sdk-s3:2.2.+'
}
2、service和permission
<service
android:name="com.amazonaws.mobileconnectors.s3.transferutility.TransferService"
android:enabled="true" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
3、配置参数等信息
public class Constants {
/*
* You should replace these values with your own. See the README for details
* on what to fill in.
*/
public static final String COGNITO_POOL_ID = "identity pool ID";
/*
* Region of your Cognito identity pool ID.
*/
public static final String COGNITO_POOL_REGION = "POOL_REGION";
/*
* Note, you must first create a bucket using the S3 console before running
* the sample (https://console.aws.amazon.com/s3/). After creating a bucket,
* put it's name in the field below.
*/
public static final String BUCKET_NAME = "BUCKET_NAME ";
/*
* Region of your bucket.
*/
public static final String BUCKET_REGION = "BUCKET_REGION ";
}
这里的值也就是对应着亚马逊网页上配置的存储信息,需要修改你自己的配置
4、代码接入
private void beginUpload(final String filePath) {
if (filePath == null) {
Toast.makeText(this, "Could not find the filepath of the selected file",
Toast.LENGTH_LONG).show();
return;
}
try {
TransferUtility transferUtility = S3TransferUitl.getTransferUtility(this);
File file = new File(filePath);
TransferObserver observer =
transferUtility.upload(
S3TransferUitl.Constants.BUCKET_NAME,
file.getName(),
file);
Log.e("linux","----beginUpload----"+filePath);
/*
* Note that usually we set the transfer listener after initializing the
* transfer. However it isn't required in this sample app. The flow is
* click upload button -> start an activity for image selection
* startActivityForResult -> onActivityResult -> beginUpload -> onResume
* -> set listeners to in progress transfers.
*/
observer.setTransferListener(new TransferListener() {
@Override
public void onStateChanged(int id, TransferState state) {
//这个函数会调用多次,根据不同状态来通知调用者
Log.e("linux","--onStateChanged---state--"+state);
if(TransferState.COMPLETED==state){
setmAvatar(filePath);
dismissProgressDialog();
ToastUtil.show(mContext, R.string.upload_avatar_success);
}else{
//注意:当TransferState.COMPLETED!=state,并不意味着这里上传失败
}
}
@Override
public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {
//这个函数会调用多次,根据不同进度来通知调用者
Log.e("linux","----onProgressChanged--bytesCurrent--"+bytesCurrent+"--bytesTotal--"+bytesTotal);
if(bytesCurrent>=bytesTotal){//这里代码依然会调用多次
dismissProgressDialog();
}
}
@Override
public void onError(int id, Exception ex) {
Log.e("linux","----onError----");
dismissProgressDialog();
ToastUtil.show(mContext, R.string.upload_avatar_fail);
ex.printStackTrace();
}
});
} catch (Exception e) {
dismissProgressDialog();
ToastUtil.show(mContext, R.string.upload_avatar_fail);
e.printStackTrace();
}
}
private void beginDownload(String key) {
// Location to download files from S3 to. You can choose any accessible
// file.
File file = new File(Environment.getExternalStorageDirectory().toString() + "/" + key);
// Initiate the download
TransferObserver observer = transferUtility.download(Constants.BUCKET_NAME, key, file);
/*
* Note that usually we set the transfer listener after initializing the
* transfer. However it isn't required in this sample app. The flow is
* click upload button -> start an activity for image selection
* startActivityForResult -> onActivityResult -> beginUpload -> onResume
* -> set listeners to in progress transfers.
*/
// observer.setTransferListener(new DownloadListener());
}