Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.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
C# 如何生成Azure SAS签名,将内容长度头约束为特定值?_C#_Azure Storage Blobs_Azure Sdk .net - Fatal编程技术网

C# 如何生成Azure SAS签名,将内容长度头约束为特定值?

C# 如何生成Azure SAS签名,将内容长度头约束为特定值?,c#,azure-storage-blobs,azure-sdk-.net,C#,Azure Storage Blobs,Azure Sdk .net,我目前正在实现ajax浏览器直接上传到azure存储容器。首先,我需要一个签名的url,该url允许我在不与浏览器共享私钥的情况下执行此操作(我在以前的ajax调用中向服务器请求此签名的url) 我的服务器端代码如下所示 public string GetSignature(string fileName, int contentLength) { CloudBlobContainer blobContainer = this.BlobClient.GetContainerReferen

我目前正在实现ajax浏览器直接上传到azure存储容器。首先,我需要一个签名的url,该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);            
}
我的问题是,我找不到指定内容长度标题的方法。我需要这一点,以防止用户上传巨大的文件,一旦他们有一个存储报价,必须遵守

我在谷歌上搜索了很多,实际上找到了一种方法,即按照实现签名算法,但我自己实现所有这些只是我最后的选择(这将更容易出错,也更耗时)


所以我的问题是,有没有一种方法可以将内容长度约束传递给
PUT
签名url?

目前没有方法对委托访问设置blob大小限制。(您提供的链接用于使用帐户密钥对请求进行签名;它不限制正在上载的blob的大小。)

在这种情况下,有两个因素会限制上载的数据量:

  • SAS令牌的时间限制。你的代码显示一个10分钟的窗口;假设60 MB/秒,允许大约36 GB
  • 单个blob的最大大小是一个硬上限
  • 一种解决方案是定期扫描容器并清除超出用户配额的任何blob

    作为一个辅助点,SharedAccessBlobHeader控制用户下载blob时看到的内容。它们不限制用户可以上传的内容,因此它们与您的场景无关。您只需为该参数传入null