Android:使用 AWS 上传到私有存储桶后无法访问媒体
Android: Media is not Accessing after uploading to private bucket using AWS
在 AWS 上创建的 Bucket 是私有的。
使用私有访问模式上传时,我无法访问该文件。
使用以下方法上传媒体时上传成功。
从 util class
获取 URL 的存储桶名称
String bucketName = Util.getBucketNameFromUrl(uploadPath);
String fileNameIncludingSubFolders = localPath.substring(localPath.lastIndexOf("/")+1);
Uri mUri = Uri.parse(localPath);
上传到 AWS 的文件
File mFile = new File(mUri.toString().trim());
AmazonS3Client s3Client = new AmazonS3Client( Ut.getCredentialsCognito(context));
PutObjectRequest por = new PutObjectRequest(bucketName, fileNameIncludingSubFolders, mFile);
por.setProgressListener(new ProgressListener() {
@Override
public void progressChanged(ProgressEvent prgEvent) {
if (progressUpdate != null) {
progressUpdate.progressStatus(String.valueOf(prgEvent.getBytesTransferred()));
}
}
});
上传媒体文件时访问模式为私有
try {
por.setCannedAcl(CannedAccessControlList.Private);
s3Client.putObject(por);
} catch (Exception e) {
e.printStackTrace();
}
你所做的一切都很好。上传会很好。
您唯一需要的是生成签名 URL.
为此使用 AWS SDK GeneratePresignedUrlRequest
。这个class有很多方法,你还可以给link设置有效期等等。
AWSCredentials awsCredentials = new BasicAWSCredentials("ACCESS_KEY_ID", "SECRET_KEY_ID");
AmazonS3 s3client = new AmazonS3Client(awsCredentials );
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, fileKey);
URL objectURL = s3client.generatePresignedUrl(request);
您可以找到如下文件密钥和密钥名称:
https://s3-[region]..amazonaws.com/[bucket name]/[file key]
在 AWS 上创建的 Bucket 是私有的。 使用私有访问模式上传时,我无法访问该文件。 使用以下方法上传媒体时上传成功。
从 util class
获取 URL 的存储桶名称 String bucketName = Util.getBucketNameFromUrl(uploadPath);
String fileNameIncludingSubFolders = localPath.substring(localPath.lastIndexOf("/")+1);
Uri mUri = Uri.parse(localPath);
上传到 AWS 的文件
File mFile = new File(mUri.toString().trim());
AmazonS3Client s3Client = new AmazonS3Client( Ut.getCredentialsCognito(context));
PutObjectRequest por = new PutObjectRequest(bucketName, fileNameIncludingSubFolders, mFile);
por.setProgressListener(new ProgressListener() {
@Override
public void progressChanged(ProgressEvent prgEvent) {
if (progressUpdate != null) {
progressUpdate.progressStatus(String.valueOf(prgEvent.getBytesTransferred()));
}
}
});
上传媒体文件时访问模式为私有
try {
por.setCannedAcl(CannedAccessControlList.Private);
s3Client.putObject(por);
} catch (Exception e) {
e.printStackTrace();
}
你所做的一切都很好。上传会很好。
您唯一需要的是生成签名 URL.
为此使用 AWS SDK GeneratePresignedUrlRequest
。这个class有很多方法,你还可以给link设置有效期等等。
AWSCredentials awsCredentials = new BasicAWSCredentials("ACCESS_KEY_ID", "SECRET_KEY_ID");
AmazonS3 s3client = new AmazonS3Client(awsCredentials );
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, fileKey);
URL objectURL = s3client.generatePresignedUrl(request);
您可以找到如下文件密钥和密钥名称:
https://s3-[region]..amazonaws.com/[bucket name]/[file key]