如何将图片上传到AWS s3存储桶?
问题描述:
//getting access to the photo gallery
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && data != null) {
Uri selectedImage = data.getData();
uploadImage.setImageURI(selectedImage);
}
Toast.makeText(this, "Test", Toast.LENGTH_LONG).show();
}
//Toast.makeText(this, "Test", Toast.LENGTH_LONG).show();
//Trying to upload image to the AWS S3bucket-
public void uploadImageToAWS(View v) {
//String sdcard = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath() + "Camera/";
Toast.makeText(this, "Test", Toast.LENGTH_LONG).show();
File MY_FILE = new File("myPhoto.png");
String YOUR_IDENTITY_POOL_ID ="POOL_ID";
CognitoCachingCredentialsProvider credentialsProvider =
new CognitoCachingCredentialsProvider(getApplicationContext(),
YOUR_IDENTITY_POOL_ID,
Regions.US_EAST_1);
AmazonS3Client s3Client = new AmazonS3Client(credentialsProvider);
s3Client.setRegion(Region.getRegion(Regions.US_EAST_1));
TransferUtility transferUtility = new TransferUtility(s3Client,
getApplicationContext());
TransferObserver observer = transferUtility.upload(
"apptestingbucket", // The S3 bucket to upload to
FILE_NAME, // The key for the uploaded object
MY_FILE);// The location of the file to
observer.setTransferListener(new TransferListener() {
@Override
public void onStateChanged(int id, TransferState state) {
if(state == TransferState.COMPLETED){
Toast.makeText(Social.this, "transfer Succeded!", Toast.LENGTH_LONG).show();
}
}
@Override
public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {
int percentage = (int) (bytesCurrent/bytesTotal * 100);
Log.e("Status", "Percentage" + percentage);
}
@Override
public void onError(int id, Exception ex) {
Log.e("MY_BUCKET", "Error: " + ex.getMessage());
}
});
}
private void retrieveImageFromAWS(){
File sdcard = Environment.getExternalStorageDirectory();
File MY_FILE = new File(sdcard, "social.png");
String YOUR_IDENTITY_POOL_ID ="POOL_ID";
CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext(),
YOUR_IDENTITY_POOL_ID
, Regions.US_EAST_1);
AmazonS3Client s3Client = new AmazonS3Client(credentialsProvider);
TransferUtility transferUtility = new TransferUtility(s3Client,
getApplicationContext());
TransferObserver observer = transferUtility.download("BUCKET_NAME",
"FILENAME_TO_BE_DOWNLOADED", MY_FILE);
observer.setTransferListener(new TransferListener() {
@Override
public void onStateChanged(int id, TransferState state) {
if(state == TransferState.COMPLETED){
Toast.makeText(Social.this, "Retrieve completed", Toast.LENGTH_LONG).show();
}
}
@Override
public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {
int percentage = (int) (bytesCurrent/bytesTotal * 100);
Log.e("status", "percentage" +percentage);
}
@Override
public void onError(int id, Exception ex) {
Log.e("MY_BUCKET", "Error Downloading: " + ex.getMessage());
}
});
}
这是我基于Android s3文档,我试图从照片库中选取图片或从手机拍照并将其上传到S3存储桶并将其恢复到应用界面。但是,如果我运行程序,我的应用程序就会崩溃。我打电话如何将图片上传到AWS s3存储桶?
uploadImageToAWS(v)
insede的
BtnUpload.onClicklistener
任何例子或者一些帮助,将不胜感激。谢谢!
答
尝试检查您的Android Manifests文件中是否包含使用权限Internet。如果这不起作用,请尝试查看是否可以将图像上传到您的应用程序之外(例如,通过命令行)到您的存储桶。也许有某种安全设置你没有正确设置。确保您可以ping您的服务器并正确设置您的安全设置。
1)如果程序崩溃,请添加logcat 2)您可能需要一个AsyncTask来执行任何网络操作 –