我目前正在将ajax浏览器直接上传到azure存储容器中。首先,我需要一个签名的URL,这样我就可以在不与浏览器共享私钥的情况下这样做(我在上一次ajax调用时向我的服务器询问这个签名的URL)。
我的服务器端代码如下所示;
public string GetSignature(string fileName, int contentLength)
{
CloudBlobContainer blobContainer = this.BlobClient.GetContainerReference("demo");
CloudBlockBlob blob = blobContainer.GetBlockBlobReference("photo1.jpg");
SharedAccessBlobPolicy policy = new SharedAccessBlobPolicy()
{
Permissions = SharedAccessBlobPermissions.Create,
SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(10)
};
SharedAccessBlobHeaders headers = new SharedAccessBlobHeaders()
{
CacheControl = "",
ContentDisposition = "",
ContentEncoding = "",
ContentLanguage = "",
ContentType = ""
// PROBLEM: Where's content length?
};
return blob.GetSharedAccessSignature(policy, headers);
}
我的问题是我找不到指定内容长度标头的方法。我需要这样做以防止用户在拥有必须遵守的存储报价后上传大文件。
我已经google了很多,实际上找到了一种方法来实现这个按照this link实现签名算法的方法,但是实现所有这些本身只是我最后的选择(它会更容易出错并且时间更长消耗)。
所以我的问题是,有没有办法将内容长度约束传递给PUT
签名的网址?
答案 0 :(得分:2)
目前无法对委派访问设置blob大小限制。 (您提供的链接用于使用帐户密钥签署请求;它不会限制正在上传的Blob的大小。)
有两个因素会限制此方案中上传的数据量:
一种解决方案是定期扫描容器并清理超出用户配额的任何blob。
作为一个侧面点,SharedAccessBlobHeaders控制用户下载blob时看到的内容。它们不限制用户可以上传的内容,因此它们与您的方案无关。您只需为此参数传入null。