如何将图像上传到AWS S3并获取图像文件';s S3 bucket url并一次性保存到dynamodb-Android
如何将图像保存到AWS S3 bucket,然后检索图像公共url,并将url与其他用户输入数据一起保存到dynamodb中,而不让用户留下活动或片段? 所有这些能否同时实现?如何将图像上传到AWS S3并获取图像文件';s S3 bucket url并一次性保存到dynamodb-Android,android,url,amazon-web-services,amazon-s3,amazon-dynamodb,Android,Url,Amazon Web Services,Amazon S3,Amazon Dynamodb,如何将图像保存到AWS S3 bucket,然后检索图像公共url,并将url与其他用户输入数据一起保存到dynamodb中,而不让用户留下活动或片段? 所有这些能否同时实现? 任何示例代码示例都会有很大帮助。谢谢 S3中的每个对象都可以具有私有或公共访问权限 如果它是公共的,那么公共URL总是http(s)://s3(-region).amazonaws.com/BUCKET/KEY,这就是第一阶段 如果同步上传,最后可以将该链接的元数据保存到DynamoDB,并确保已修复。请尝试以下代码-
任何示例代码示例都会有很大帮助。谢谢 S3中的每个对象都可以具有私有或公共访问权限 如果它是公共的,那么公共URL总是
http(s)://s3(-region).amazonaws.com/BUCKET/KEY
,这就是第一阶段
如果同步上传,最后可以将该链接的元数据保存到DynamoDB,并确保已修复。请尝试以下代码-
private void uploadImageToAWS() {
AsyncTask<String, String, String> _Task = new AsyncTask<String, String, String>() {
@Override
protected void onPreExecute() {
}
@Override
protected String doInBackground(String... arg0)
{
if (NetworkAvailablity.checkNetworkStatus(PrintRollScreenActivity.this))
{
try {
java.util.Date expiration = new java.util.Date();
long msec = expiration.getTime();
msec += 1000 * 60 * 60; // 1 hour.
expiration.setTime(msec);
publishProgress(arg0);
String existingBucketName = "YOUR_AWS_BUCKET_NAME";////////////
String keyName = "image_name";
String filePath = "";
AmazonS3Client s3Client1 = new AmazonS3Client( new BasicAWSCredentials( "AWS_KEY","AWS_SECRET") );
PutObjectRequest por = new PutObjectRequest(existingBucketName,
keyName + ".png",new File(filePath));//key is URL
//making the object Public
por.setCannedAcl(CannedAccessControlList.PublicRead);
s3Client1.putObject(por);
String _finalUrl = "https://"+existingBucketName+".s3.amazonaws.com/" + keyName + ".png";
} catch (Exception e) {
// writing error to Log
e.printStackTrace();
}
}
else
{
}
return null;
}
@Override
protected void onProgressUpdate(String... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
System.out.println("Progress : " + values);
}
@Override
protected void onPostExecute(String result)
{
}
};
_Task.execute((String[]) null);
}
private void uploadImageToAWS(){
AsyncTask _Task=新建AsyncTask(){
@凌驾
受保护的void onPreExecute(){
}
@凌驾
受保护的字符串doInBackground(字符串…arg0)
{
if(networkavailability.checkNetworkStatus(PrintRollScreenActivity.this))
{
试一试{
java.util.Date expiration=new java.util.Date();
long msec=expiration.getTime();
毫秒+=1000*60*60;//1小时。
有效期。设置时间(毫秒);
出版进度(arg0);
字符串existingBucketName=“您的\u AWS\u BUCKET\u NAME”////////////
String keyName=“image\u name”;
字符串filePath=“”;
AmazonS3Client s3Client1=新的AmazonS3Client(新的基本WSCredentials(“AWS_密钥”、“AWS_机密”);
PutObjectRequest por=新的PutObjectRequest(existingBucketName,
keyName+“.png”,新文件(filePath));//键是URL
//公开对象
por.setCannedAcl(CanneDaccessController.PublicRead);
s3Client1.putObject(por);
字符串_finalUrl=“https://“+existingBucketName+”.s3.amazonaws.com/“+keyName+”.png”;
}捕获(例外e){
//将错误写入日志
e、 printStackTrace();
}
}
其他的
{
}
返回null;
}
@凌驾
受保护的void onProgressUpdate(字符串…值){
//TODO自动生成的方法存根
super.onProgressUpdate(值);
System.out.println(“进度:+值”);
}
@凌驾
受保护的void onPostExecute(字符串结果)
{
}
};
_Task.execute((字符串[])null);
}
我就是这样将图像上传到S3的:
CognitoCachingCredentialsProvider credentialsProvider =
new CognitoCachingCredentialsProvider(
context.getApplicationContext(),
YOUR_IDENTITY_POOL_ID,
Regions.US_EAST_1);
AmazonS3Client s3Client = new AmazonS3Client(credentialsProvider);
TransferUtility transferUtility = new TransferUtility(s3Client, context.
getApplicationContext());
TransferObserver observer = transferUtility.upload(
MY_BUCKET, // The S3 bucket to upload to
OBJECT_KEY, // The key for the uploaded object
FILE_TO_UPLOAD // The location of the file to be uploaded );
在清单文件中包含以下内容:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<service android:name= "com.amazonaws.mobileconnectors.s3.transferutility.TransferService" android:enabled="true" />
我将S3 bucket中的文件夹公开,并将文件链接保存在dynamoDB中,如下所示:
“”
-S3URL可以基于区域、存储桶和路径构建。它总是相同的结构。非常感谢您的回复:DHey@Sbruce您能在这里发布从lambda函数或android上传图像并将url保存到dynamodb的完整示例吗?我已经在下面解释了如何将图像保存到S3。我还不知道如何使用lambda函数。为了将url保存到DynamoDB,我使用了DynamoDB映射器类。非常感谢您的有用回复:数据此url不可公开访问。