有人成功地做到了这一点吗?
我的想法是发送到servlet,在servlet对用户进行身份验证后,它将以查询字符串Request Authentication url作为响应。然后,用户将使用该url来上传图片文件。
想知道这是不是可能的。
我不明白的是,如何将图片从计算机或设备传输到s3。
这是StringToSign:
PUT\n
(content here?)\n
image/jpeg\n
1175139620\n
/johnsmith/photos/puppy.jpg如何将内容插入要签名的字符串?我是先用base64再用md-5吗?
发布于 2011-12-30 16:58:37
是的,这非常有可能。您只需处理如何在创建预签名的URL之后发送回URL。可以是XML或纯文本。
我建议使用jets3t库来创建网址。您可以调用此API:
org.jets3t.service.S3Service.createSignedPutUrl(String,字符串、映射、日期、布尔值)
您也可以改为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);然后使用URL上传您的图像,如下所示:
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
无论如何,您都不需要将凭据传递给此方法。它是唯一需要凭据的s3service对象。像这样..。
S3Service s3service=new RestS3Service(credentials); // pass your credentials here
String createSignedGetUrl = s3service.createSignedGetUrl(storageObject.getBucketName(),
storageObject.getKey(),new DateTime().plusMinutes(5).toDate());https://stackoverflow.com/questions/8677696
复制相似问题