我非常喜欢写Android应用程序。我复制了一些示例代码以将图像上传到AWS S3。但是当我在手机上运行时,它总是关闭应用程序。以下代码:
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String mediaFile = "IMG_" + timeStamp + ".jpg";
File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
File tmpFile = new File(dir, mediaFile);
final Uri outputFileUri = Uri.fromFile(tmpFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, PICK_FROM_CAMERA);
String ACCESS_KEY="ABCDEFGHIJKLMNOPQ",
SECRET_KEY="S123T456I789",
MY_BUCKET="Photo",
AWSCredentials credentials = new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY);
AmazonS3 s3 = new AmazonS3Client(credentials);
TransferUtility transferUtility = new TransferUtility(s3, getApplicationContext());
TransferObserver observer = transferUtility.upload(MY_BUCKET,mediaFile,file);
非常感谢 爱德蒙
答案 0 :(得分:0)
我建议按池ID使用S3上传。建议不要在app中使用SECRET_KEY和ACCESS_KEY硬编码。 Transfer Utility也将以与池ID相同的方式工作您只需要更改凭据提供程序。请参阅以下代码:
public static TransferUtility getTransferUtility(Context context) {
if (sTransferUtility == null) {
sTransferUtility = new TransferUtility(getS3Client(context.getApplicationContext()),
context.getApplicationContext());
}
return sTransferUtility;
}
public static AmazonS3Client getS3Client(Context context) {
if (sS3Client == null) {
sS3Client = new AmazonS3Client(getCredProvider(context.getApplicationContext()));
sS3Client.setRegion(Region.getRegion(Regions.AP_SOUTH_1));
}
return sS3Client;
}
private static CognitoCachingCredentialsProvider getCredProvider(Context context) {
if (sCredProvider == null) {
sCredProvider = new CognitoCachingCredentialsProvider(
context.getApplicationContext(),
Constants.COGNITO_POOL_ID,
Regions.AP_NORTHEAST_1);
}
return sCredProvider;
}
更改应用的区域和池ID,并使用转移实用程序上传:
TransferUtility transferUtility = AppUtil.getTransferUtility(context);
TransferObserver transferObserver = transferUtility.upload(BUCKET_NAME, forKey, new File(fileUrl));
transferObserver.setTransferListener(new TransferListener() {
@Override
public void onStateChanged(int id, TransferState state) {
if (state == TransferState.COMPLETED) {
// Completed
}
}
@Override
public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {}
@Override
public void onError(int id, Exception ex) {
ex.printStackTrace();
// Error
}
});