【发布时间】:2014-01-17 18:58:27
【问题描述】:
我们的要求是upload objects in Amazon S3 using a browser based interface。为此,我们使用Query String Authentication 机制(在上传过程中我们没有最终用户的凭据,我们正在使用 ASP.Net 编写代码来执行此操作。我在尝试做多部分时遇到了问题上传。
我正在使用 AWS .Net SDK(版本 2.0.2.5)使用以下代码创建查询字符串:
GetPreSignedUrlRequest request = new GetPreSignedUrlRequest()
{
BucketName = bucketName,
Key = objectKey,
Expires = expiryTime,
Protocol = Amazon.S3.Protocol.HTTP,
Verb = Amazon.S3.HttpVerb.PUT,
ContentType = "application/octet-stream,
};
var url = AWSClientFactory.CreateAmazonS3Client(credentials, region).GetPreSignedURL(request);
如果我不进行多部分上传,这将非常有用。但是我无法弄清楚如何使用查询字符串进行分段上传。
我遇到的问题是:
- 为了进行分段上传,我需要先获得一个
UploadId。但是获取UploadId的方法是POSTHTTP 请求,而GetPreSignedUrlRequest方法不将POST作为HTTP 动词。 - 我最终制定了一个存储桶策略,在其中授予我的 Amazon S3 帐户对相关存储桶(不属于我)的权限,并使用该帐户执行 HTTP POST 以获取
UploadId。 - 现在根据我的理解,在创建查询字符串身份验证 URL 时,查询字符串必须包含
UploadId和PartNumber参数,但查看GetPreSignedUrlRequest对象属性,我无法弄清楚如何在此处指定这些参数.
我倾向于相信 .Net SDK 不支持这种情况,我不得不求助于原生 REST API 来创建查询字符串。我的理解正确吗?
对此的任何见解都将受到高度赞赏。
提前祝大家新年快乐。
【问题讨论】:
-
你的信念是正确的。适用于 .NET 的 AWS 开发工具包目前不支持为分段上传创建预签名 URL。
-
谢谢。您能否发布与答案相同的内容,以便我接受。如果有人阅读此线程并感兴趣,我写了一篇关于使用 Amazon S3 REST API 使用 C# 进行多部分上传的博客文章:gauravmantri.com/2014/01/06/…。