[英]Not able to upload image using Amazon S3 SDK in Android application. 400 error
[英]Image upload amazon s3 android SDK 2.0
我想将图像上传到android中的amazon s3存储桶。 我没有收到任何错误,但那是行不通的,有人可以帮助我吗? 我找不到任何很好的例子或与此有关的问题。
我将图像分配给“文件images3”
images3 = new File(uri.getPath());
public void addEventToDB(){
Thread thread = new Thread()
{
@Override
public void run() {
try {
CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
getActivity().getApplicationContext(), // get the context for the current activity
"...",
"us-east-1:...",
"arn:aws:iam::...:role/Cognito_WitpaAuth_DefaultRole",
"arn:aws:iam::...:role/Cognito_WitpaAuth_DefaultRole",
Regions.US_EAST_1
);
String bucket_name = "witpa";
String key = "images.jpeg";
TransferManager transferManager = new TransferManager(credentialsProvider);
transferManager.upload(bucket_name, key, images3);
} catch (Exception e) {
e.printStackTrace();
}
}
};
thread.start();
}
我创建了存储桶,并设置了每个人都可以读写的权限。
在亚马逊Cognito中,我将所有内容保留为默认值。
有人知道我如何使它工作吗?
试试这个。 由于我遇到了您面临的同样问题。
我已经通过使用下面的代码修复了。
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentEncoding("UTF-8");
size = inputStream.available();
metadata.setContentLength(size);
TransferManager transferManager = new TransferManager(credentialsProvider);
Upload upload = transferManager.upload(bucket_name, key, images3, metadata);
upload.waitForCompletion();
在s3亚马逊中下载图像和上传图像的非常简单的方法。 您使用此Webservice做一个简单的类
public class WebserviceAmazon extends AsyncTask<Void, Void, Void> {
private String mParams;
private String mResult = "x";
WebServiceInterface<String, String> mInterface;
private int mRequestType;
private String UserId;
private Context mContext;
public WebserviceAmazon(Context context,String imagePath,String AppId,int type) {
this.mContext = context;
this.mParams = imagePath;
this.mRequestType = type;
this.UserId = AppId;
}
public void result(WebServiceInterface<String, String> myInterface) {
this.mInterface = myInterface;
}
@Override
protected Void doInBackground(Void... params) {
String ACCESS_KEY ="abc..";
String SECRET_KEY = "klm...";
try {
if (mRequestType == 1) { // POST
AmazonS3Client s3Client = new AmazonS3Client(new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY));
PutObjectRequest request = new PutObjectRequest("bucketName", "imageName", new File(mParams));
s3Client.putObject(request);
mResult = "success";
} if (mRequestType == 2) { // For get image data
AmazonS3Client s3Client = new AmazonS3Client(new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY));
S3Object object = s3Client.getObject(new GetObjectRequest("bucketName", mParams));
S3ObjectInputStream objectContent = object.getObjectContent();
byte[] byteArray = IOUtils.toByteArray(objectContent);
Bitmap bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
mResult = "success";
}
} catch (Exception e) {
mResult = e.toString();
e.printStackTrace();
}
return null;
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
mInterface.success(this.mResult);
}
public interface WebServiceInterface<E, R> {
public void success(E reslut);
public void error(R Error);
}
}
在项目中的任何地方调用此Web服务
WebserviceAmazon amazon = new WebserviceAmazon(getActivity(), imageName, "", 2);
amazon.result(new WebserviceAmazon.WebServiceInterface<String, String>() {
@Override
public void success(String reslut) {
}
@Override
public void error(String Error) {
}
});
return totalPoints;
}
您应该执行两个步骤;
PutObjectRequest por = new PutObjectRequest( BUCKET_NAME, Key, stored); por.setCannedAcl(CannedAccessControlList.PublicReadWrite); s3Client.putObject(por);
我已经做到了,并且可以正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.