如何使用 Android 的 AWS SDK 将图像上传到 Digital Ocean Spaces?
How to upload images to Digital Ocean Spaces using AWS SDK for Android?
由于 Digital Ocean Spaces API 与 AWS SDK 兼容,如何使用 AWS SDK for Android 以编程方式将图像上传到 Digital Ocean Spaces?
将 sdk 添加到 android 工作室项目中的 build.gradle:
compile 'com.amazonaws:aws-android-sdk-core:2.6.9'
compile 'com.amazonaws:aws-android-sdk-s3:2.6.9'
compile 'com.amazonaws:aws-android-sdk-ddb:2.6.9'
在清单文件中添加以下服务:
<service android:name="com.amazonaws.mobileconnectors.s3.transferutility.TransferService"
android:enabled="true" />
基本步骤:
1.You 首先使用 BasicAWSCredentails 创建用于访问 S3 的 AWS 凭证 class
2.Pass AmazonS3 实例的 AWS 凭证
3.You 然后将 AmazonS3 对象传递给 TransferUtility class
4.You 将您的 BucketName、FileName 和 FileObject(要传输的)分配给 TransferObserver class
5.Finally 您使用 TransferObserver 的 setTransferListener 跟踪您的转账详情 class
代码(经过测试和工作):
AmazonS3Client s3;
BasicAWSCredentials credentials;
TransferUtility transferUtility;
final TransferObserver observer;
String key = "YOUR_SPACES_KEY";
String secret = "YOUR_SPACES_SECRET_KEY";
credentials = new BasicAWSCredentials(key, secret);
s3 = new AmazonS3Client(credentials);
s3.setEndpoint("https://BUCKET_NAME.nyc3.digitaloceanspaces.com/DIRECTORY_IF_NEEDED");
transferUtility = new TransferUtility(s3, activity);
CannedAccessControlList filePermission = CannedAccessControlList.PublicRead;
observer = transferUtility.upload(
"", //empty bucket name, included in endpoint
"FILE_NAME.PNG",
new File(), //a File object that you want to upload
filePermission
);
observer.setTransferListener(new TransferListener() {
@Override
public void onStateChanged(int id, TransferState state) {
if (state.COMPLETED.equals(observer.getState())) {
Toast.makeText(activity, "Space upload completed !!", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {
}
@Override
public void onError(int id, Exception ex) {
Toast.makeText(activity, "Space upload error: " + ex.getMessage(), Toast.LENGTH_SHORT).show();
}
});
参考自:http://yasirameen.com/2016/10/uploading-file-to-amazon-s3/
你可以试试看这篇文章:
Send Image from Java to DigitalOcean Space (Bucket) using AWS SDK
我写它是因为我找不到Java的任何好的例子。您也可以在 Android 中应用我的知识。这个想法是将图像转换为 base64 编码的字节数组,然后使用 AWS SDK 的端点 putObject() 并将 ObjectMetadata 作为参数传递。在此对象中,您指定字符串代表的内容 ("image/jpg"),仅此而已。
public String uploadBase64ToStorage(int userid, String location, String strimage) {
AWSCredentialsProvider awscp = new AWSStaticCredentialsProvider(
new BasicAWSCredentials("DO_ACCESS_KEY", "DO_SECRET_KEY")
);
AmazonS3 space = AmazonS3ClientBuilder
.standard()
.withCredentials(awscp)
.withEndpointConfiguration(
new AwsClientBuilder.EndpointConfiguration("BUCKET_ENDPOINT", "BUCKET_REGION")
)
.build();
byte[] byteimage = Base64.getDecoder().decode(strimage);
InputStream is = new ByteArrayInputStream(byteimage);
ObjectMetadata om = new ObjectMetadata();
om.setContentLength(byteimage.length);
om.setContentType("image/jpg");
String filepath = /somefolder/someanotherfolder/testfile.jpg";
space.putObject("BUCKET_NAME", filepath, is, om);
return space.getUrl("BUCKET_NAME", filepath).toString();
}
如需完整教程,请参阅上面的文章 link。
In case anyone is looking for Core Java implementation see below code,
public static String uploadToDOSpaces(InputStream uploadedInputStream, String fileName1, String bucketPath,
String ext1) {
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
String bucketName = "files" + bucketPath;
String keyName = timestamp.getTime() + ext1;
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withEndpointConfiguration(
new AwsClientBuilder.EndpointConfiguration("region.digitaloceanspaces.com", "your region"))
.withCredentials(new AWSStaticCredentialsProvider(
new BasicAWSCredentials("Access-Key", "Secret-Key")))
.build();
ObjectMetadata meta = new ObjectMetadata();
byte[] bytes = null;
try {
bytes = IOUtils.toByteArray(uploadedInputStream);
} catch (IOException e) {
}
meta.setContentLength(bytes.length);
meta.setContentDisposition("inline");
switch (ext1) {
case "txt":
meta.setContentType("text/plain");
break;
case "pdf":
meta.setContentType("application/pdf");
break;
case "jpeg":
meta.setContentType("image/jpeg");
break;
case "jpg":
meta.setContentType("image/jpeg");
break;
case "gif":
meta.setContentType("image/gif");
break;
case "png":
meta.setContentType("image/png");
break;
case "PNG":
meta.setContentType("image/png");
break;
case "mp4":
meta.setContentType("video/mp4");
break;
case "MP4":
meta.setContentType("video/mp4");
break;
}
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
s3Client.putObject(new PutObjectRequest(bucketName, keyName, byteArrayInputStream, meta)
.withCannedAcl(CannedAccessControlList.PublicRead));
java.util.Date expiration = new java.util.Date();
long msec = expiration.getTime();
msec += 1000 * 60 * 60; // 1 hour.
expiration.setTime(msec);
URL abc = s3Client.generatePresignedUrl(bucketName, keyName, expiration);
String abcurl = abc.toString();
String[] urls = abcurl.split("\?");
return urls[0];
}
Also here are maven dependencies.
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.11.511</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-core</artifactId>
<version>1.11.511</version>
</dependency>
Thanks and cheers..!!
由于 Digital Ocean Spaces API 与 AWS SDK 兼容,如何使用 AWS SDK for Android 以编程方式将图像上传到 Digital Ocean Spaces?
将 sdk 添加到 android 工作室项目中的 build.gradle:
compile 'com.amazonaws:aws-android-sdk-core:2.6.9'
compile 'com.amazonaws:aws-android-sdk-s3:2.6.9'
compile 'com.amazonaws:aws-android-sdk-ddb:2.6.9'
在清单文件中添加以下服务:
<service android:name="com.amazonaws.mobileconnectors.s3.transferutility.TransferService"
android:enabled="true" />
基本步骤:
1.You 首先使用 BasicAWSCredentails 创建用于访问 S3 的 AWS 凭证 class
2.Pass AmazonS3 实例的 AWS 凭证
3.You 然后将 AmazonS3 对象传递给 TransferUtility class
4.You 将您的 BucketName、FileName 和 FileObject(要传输的)分配给 TransferObserver class
5.Finally 您使用 TransferObserver 的 setTransferListener 跟踪您的转账详情 class
代码(经过测试和工作):
AmazonS3Client s3;
BasicAWSCredentials credentials;
TransferUtility transferUtility;
final TransferObserver observer;
String key = "YOUR_SPACES_KEY";
String secret = "YOUR_SPACES_SECRET_KEY";
credentials = new BasicAWSCredentials(key, secret);
s3 = new AmazonS3Client(credentials);
s3.setEndpoint("https://BUCKET_NAME.nyc3.digitaloceanspaces.com/DIRECTORY_IF_NEEDED");
transferUtility = new TransferUtility(s3, activity);
CannedAccessControlList filePermission = CannedAccessControlList.PublicRead;
observer = transferUtility.upload(
"", //empty bucket name, included in endpoint
"FILE_NAME.PNG",
new File(), //a File object that you want to upload
filePermission
);
observer.setTransferListener(new TransferListener() {
@Override
public void onStateChanged(int id, TransferState state) {
if (state.COMPLETED.equals(observer.getState())) {
Toast.makeText(activity, "Space upload completed !!", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {
}
@Override
public void onError(int id, Exception ex) {
Toast.makeText(activity, "Space upload error: " + ex.getMessage(), Toast.LENGTH_SHORT).show();
}
});
参考自:http://yasirameen.com/2016/10/uploading-file-to-amazon-s3/
你可以试试看这篇文章:
Send Image from Java to DigitalOcean Space (Bucket) using AWS SDK
我写它是因为我找不到Java的任何好的例子。您也可以在 Android 中应用我的知识。这个想法是将图像转换为 base64 编码的字节数组,然后使用 AWS SDK 的端点 putObject() 并将 ObjectMetadata 作为参数传递。在此对象中,您指定字符串代表的内容 ("image/jpg"),仅此而已。
public String uploadBase64ToStorage(int userid, String location, String strimage) {
AWSCredentialsProvider awscp = new AWSStaticCredentialsProvider(
new BasicAWSCredentials("DO_ACCESS_KEY", "DO_SECRET_KEY")
);
AmazonS3 space = AmazonS3ClientBuilder
.standard()
.withCredentials(awscp)
.withEndpointConfiguration(
new AwsClientBuilder.EndpointConfiguration("BUCKET_ENDPOINT", "BUCKET_REGION")
)
.build();
byte[] byteimage = Base64.getDecoder().decode(strimage);
InputStream is = new ByteArrayInputStream(byteimage);
ObjectMetadata om = new ObjectMetadata();
om.setContentLength(byteimage.length);
om.setContentType("image/jpg");
String filepath = /somefolder/someanotherfolder/testfile.jpg";
space.putObject("BUCKET_NAME", filepath, is, om);
return space.getUrl("BUCKET_NAME", filepath).toString();
}
如需完整教程,请参阅上面的文章 link。
In case anyone is looking for Core Java implementation see below code,
public static String uploadToDOSpaces(InputStream uploadedInputStream, String fileName1, String bucketPath,
String ext1) {
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
String bucketName = "files" + bucketPath;
String keyName = timestamp.getTime() + ext1;
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withEndpointConfiguration(
new AwsClientBuilder.EndpointConfiguration("region.digitaloceanspaces.com", "your region"))
.withCredentials(new AWSStaticCredentialsProvider(
new BasicAWSCredentials("Access-Key", "Secret-Key")))
.build();
ObjectMetadata meta = new ObjectMetadata();
byte[] bytes = null;
try {
bytes = IOUtils.toByteArray(uploadedInputStream);
} catch (IOException e) {
}
meta.setContentLength(bytes.length);
meta.setContentDisposition("inline");
switch (ext1) {
case "txt":
meta.setContentType("text/plain");
break;
case "pdf":
meta.setContentType("application/pdf");
break;
case "jpeg":
meta.setContentType("image/jpeg");
break;
case "jpg":
meta.setContentType("image/jpeg");
break;
case "gif":
meta.setContentType("image/gif");
break;
case "png":
meta.setContentType("image/png");
break;
case "PNG":
meta.setContentType("image/png");
break;
case "mp4":
meta.setContentType("video/mp4");
break;
case "MP4":
meta.setContentType("video/mp4");
break;
}
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
s3Client.putObject(new PutObjectRequest(bucketName, keyName, byteArrayInputStream, meta)
.withCannedAcl(CannedAccessControlList.PublicRead));
java.util.Date expiration = new java.util.Date();
long msec = expiration.getTime();
msec += 1000 * 60 * 60; // 1 hour.
expiration.setTime(msec);
URL abc = s3Client.generatePresignedUrl(bucketName, keyName, expiration);
String abcurl = abc.toString();
String[] urls = abcurl.split("\?");
return urls[0];
}
Also here are maven dependencies.
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.11.511</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-core</artifactId>
<version>1.11.511</version>
</dependency>
Thanks and cheers..!!