Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AWS S3查询字符串请求身份验证替代上载文件_Java_Amazon S3_Amazon Web Services - Fatal编程技术网

Java AWS S3查询字符串请求身份验证替代上载文件

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-

有人成功地做到了这一点吗

我的想法是发布到servlet,在servlet对用户进行身份验证后,它将使用查询字符串请求身份验证url进行响应。然后,用户将使用此url上载图片文件

我想知道这是否可能

我不明白的是如何将图片从计算机或设备传输到s3

这是StringToSign:

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());