Java AWS Android SDK将文件上载到S3,但可以';我在桶里找不到
我正在学习构建一个Android应用程序,将文件上传到AWS S3。为了开始,我遵循了这个原则。一切正常,我成功地将文件上传到我的bucket 从上面提到的教程中,我构建了一个应用程序,它具有将文件上传到S3存储桶的功能。我可以在没有任何错误消息的情况下运行该程序,但是,在我的S3存储桶中无法看到该文件。我搜索过类似的讨论,但无法真正解决它。请看我下面的公司 格雷德尔先生 我在这里实现了所需的依赖项Java AWS Android SDK将文件上载到S3,但可以';我在桶里找不到,java,android,amazon-web-services,amazon-s3,Java,Android,Amazon Web Services,Amazon S3,我正在学习构建一个Android应用程序,将文件上传到AWS S3。为了开始,我遵循了这个原则。一切正常,我成功地将文件上传到我的bucket 从上面提到的教程中,我构建了一个应用程序,它具有将文件上传到S3存储桶的功能。我可以在没有任何错误消息的情况下运行该程序,但是,在我的S3存储桶中无法看到该文件。我搜索过类似的讨论,但无法真正解决它。请看我下面的公司 格雷德尔先生 我在这里实现了所需的依赖项 apply plugin: 'com.android.application' android
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.example.thanawin.myapplication"
minSdkVersion 25
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
implementation 'com.amazonaws:aws-android-sdk-s3:2.6.+'
implementation 'com.amazonaws:aws-android-sdk-cognito:2.6.+'
implementation ('com.amazonaws:aws-android-sdk-mobile-client:2.6.+@aar') { transitive = true }
}
AndroidManifest.xml
在这里,我添加了用户权限和服务
Util.java
这是凭证
package com.example.thanawin.myapplication;
import android.content.Context;
import com.amazonaws.auth.CognitoCachingCredentialsProvider;
import com.amazonaws.mobileconnectors.s3.transferutility.TransferUtility;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3Client;
public class Util {
private AmazonS3Client sS3Client;
private CognitoCachingCredentialsProvider sCredProvider;
private TransferUtility sTransferUtility;
private CognitoCachingCredentialsProvider getCredProvider(Context context) {
if (sCredProvider == null) {
sCredProvider = new CognitoCachingCredentialsProvider(
context.getApplicationContext(),
Constants.COGNITO_POOL_ID,
Regions.fromName(Constants.COGNITO_POOL_REGION));
}
return sCredProvider;
}
public AmazonS3Client getS3Client(Context context) {
if (sS3Client == null) {
sS3Client = new AmazonS3Client(getCredProvider(context.getApplicationContext()));
sS3Client.setRegion(Region.getRegion(Regions.fromName(Constants.BUCKET_REGION)));
}
return sS3Client;
}
public TransferUtility getTransferUtility(Context context) {
if (sTransferUtility == null) {
sTransferUtility = TransferUtility.builder()
.context(context.getApplicationContext())
.s3Client(getS3Client(context.getApplicationContext()))
.defaultBucket(Constants.BUCKET_NAME)
.build();
}
return sTransferUtility;
}
}
Constants.java
我在这里定义了我的钥匙
package com.example.thanawin.myapplication;
public class Constants {
public static final String COGNITO_POOL_ID = "MY_POOL_ID";
public static final String COGNITO_POOL_REGION = "MY_POOL_REGION";
public static final String BUCKET_NAME = "BUCKET_NAME";
public static final String BUCKET_REGION = "BUCKET_REGION";
}
当运行代码时,没有错误,但是我无法在bucket中获取图像文件。如有任何建议或意见,将不胜感激
更新
在SharedReferences中找不到有效凭据“您使用的SDK版本是什么?还有什么是安卓版本?文件名和密钥是什么?@Karthikeyan谢谢你的回复。我使用的是AndriodSDK版本26.1.1,运行在Android虚拟设备7.1.1上。是MainActivity.java中的文件名和密钥是“aaa.jpg”?您能否按照此函数获取文件路径而不是新文件(“/sdcard/aaa.jpg”)?@Karthikeyan我将尝试在代码中实现它。顺便说一句,我在logcat“D/CognitoCachingCredentialsProvider:从SharedReferences加载凭据在SharedReferences中找不到有效凭据”中看到了这条消息。这意味着此时没有有效凭据,但当向S3发出请求时,将获取和存储凭据,并用于联系S3。
package com.example.thanawin.myapplication;
import android.content.Context;
import com.amazonaws.auth.CognitoCachingCredentialsProvider;
import com.amazonaws.mobileconnectors.s3.transferutility.TransferUtility;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3Client;
public class Util {
private AmazonS3Client sS3Client;
private CognitoCachingCredentialsProvider sCredProvider;
private TransferUtility sTransferUtility;
private CognitoCachingCredentialsProvider getCredProvider(Context context) {
if (sCredProvider == null) {
sCredProvider = new CognitoCachingCredentialsProvider(
context.getApplicationContext(),
Constants.COGNITO_POOL_ID,
Regions.fromName(Constants.COGNITO_POOL_REGION));
}
return sCredProvider;
}
public AmazonS3Client getS3Client(Context context) {
if (sS3Client == null) {
sS3Client = new AmazonS3Client(getCredProvider(context.getApplicationContext()));
sS3Client.setRegion(Region.getRegion(Regions.fromName(Constants.BUCKET_REGION)));
}
return sS3Client;
}
public TransferUtility getTransferUtility(Context context) {
if (sTransferUtility == null) {
sTransferUtility = TransferUtility.builder()
.context(context.getApplicationContext())
.s3Client(getS3Client(context.getApplicationContext()))
.defaultBucket(Constants.BUCKET_NAME)
.build();
}
return sTransferUtility;
}
}
package com.example.thanawin.myapplication;
public class Constants {
public static final String COGNITO_POOL_ID = "MY_POOL_ID";
public static final String COGNITO_POOL_REGION = "MY_POOL_REGION";
public static final String BUCKET_NAME = "BUCKET_NAME";
public static final String BUCKET_REGION = "BUCKET_REGION";
}