Java AWS S3查询字符串请求身份验证替代上载文件
有人成功地做到了这一点吗 我的想法是发布到servlet,在servlet对用户进行身份验证后,它将使用查询字符串请求身份验证url进行响应。然后,用户将使用此url上载图片文件 我想知道这是否可能 我不明白的是如何将图片从计算机或设备传输到s3 这是StringToSign:Java AWS S3查询字符串请求身份验证替代上载文件,java,amazon-s3,amazon-web-services,Java,Amazon S3,Amazon Web Services,有人成功地做到了这一点吗 我的想法是发布到servlet,在servlet对用户进行身份验证后,它将使用查询字符串请求身份验证url进行响应。然后,用户将使用此url上载图片文件 我想知道这是否可能 我不明白的是如何将图片从计算机或设备传输到s3 这是StringToSign: PUT\n (content here?)\n image/jpeg\n 1175139620\n /johnsmith/photos/puppy.jpg 如何将内容插入要签名的字符串中?我是先打64码,然后再打md-
PUT\n
(content here?)\n
image/jpeg\n
1175139620\n
/johnsmith/photos/puppy.jpg
如何将内容插入要签名的字符串中?我是先打64码,然后再打md-5码吗?是的,这很有可能。您只需处理在创建预签名URL后如何发送URL。可能是XML或纯文本 我建议使用jets3t库来创建URL。您可以调用此API: org.jets3t.service.S3Service.createSignedPutUrl(字符串、字符串、映射、日期、布尔值) 您也可以使用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);
我没有得到的部分是StringToSign。参考主帖子添加更多内容。更新我的答案。我不太清楚jets3t图书馆内部是如何处理这个问题的。但这是java的优点之一,不是吗,下载一个库并根据文档调用API。Ok会研究它。我试图了解如果我不使用jets3t,它是如何工作的。Hmmm createSignedGetUrl不推荐使用。知道这是什么吗?谢谢!,现在一切都好了。仅供讨论,是否有一个用于iPhone开发的等效库?
S3Service s3service=new RestS3Service(credentials); // pass your credentials here
String createSignedGetUrl = s3service.createSignedGetUrl(storageObject.getBucketName(),
storageObject.getKey(),new DateTime().plusMinutes(5).toDate());