将图像上传到AWS S3错误

时间:2017-10-13 12:18:21

标签: android

我非常喜欢写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);

非常感谢 爱德蒙

1 个答案:

答案 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
    }
});