有没有人成功完成过这项工作?
我的想法是发布到servlet,它将在servlet验证用户之后使用Query String Request Authentication url进行响应。然后,用户将使用此URL上传图片文件。
想知道这是否可能。
我没有得到的是如何将图片从计算机或设备传输到s3。
这是StringToSign:
PUT\n
(content here?)\n
image/jpeg\n
1175139620\n
/johnsmith/photos/puppy.jpg
如何将内容插入到字符串中进行签名?我首先是它的基础,然后是md-5吗?
答案 0 :(得分:2)
是的,这是非常有可能的。您只需要处理在创建预签名URL后如何发回URL的方式。也许是XML或纯文本..
我建议使用jets3t库来创建URL。您可以调用此API:
org.jets3t.service.S3Service.createSignedPutUrl(String,String,Map,Date,boolean)
您也可以使用IAM政策。但你的方式更容易。
编辑:添加了更多信息..
这就是它的美丽,当你使用jets3t库时,你不需要任何这些。 只需调用方法:
S3Service s3Service = new RestS3Service(awsCredentials);
// Create a signed HTTP PUT URL valid for 5 minutes.
String putUrl = s3Service.createSignedPutUrl(bucket.getName(), object.getKey(),
object.getMetadataMap(), expiryDate, false);
并使用网址上传您的图片,如下所示:
SignedUrlHandler signedUrlHandler = new RestS3Service(null);
S3Object object = new S3Object(bucket,<your file object goes here>);
S3Object putObject = signedUrlHandler.putObjectWithSignedUrl(putUrl, object);
编辑signedGetURL():
只有那些传入ProviderCredential的人才被弃用。这个不是:
http://jets3t.s3.amazonaws.com/api/org/jets3t/service/S3Service.html#createSignedGetUrl(java.lang.String,java.lang.String,java.util.Date)
无论如何,您不需要将凭据传递给此方法。它只是需要凭证的s3service对象..像这样...
S3Service s3service=new RestS3Service(credentials); // pass your credentials here
String createSignedGetUrl = s3service.createSignedGetUrl(storageObject.getBucketName(),
storageObject.getKey(),new DateTime().plusMinutes(5).toDate());