2017-10-13 157 views
0

我非常喜歡寫Android應用程序。我複製了一些示例代碼以將圖像上傳到AWS S3。但是當我在手機上運行時,它總是關閉應用程序。下面的代碼:將圖像上傳到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

https://stackoverflow.com/a/34872276/3615605試試這個 – MathaN

回答

0

我建議由池ID使用S3上傳。不建議在應用程序中使用SECRET_KEY和ACCESS_KEY硬編碼。 Transfer Utility也將以相同的方式與池Id一起工作您只需更改Credential Provider。請參見下面的代碼:

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