Azure文件存储:错误400(不支持条件标头。)

时间:2017-12-29 17:50:55

标签: c# azure azure-storage

我不确定这里出了什么问题。我正在尝试显示当前存储在Azure文件存储中的图像。如果我直接在我的浏览器中链接,那么它似乎下载就好了。但是,当我将网址放在img src中时,我在控制台中收到此错误。

以下是我目前正在检索文件的网址:

public static string GetFile(Models.Core.Document file, string friendlyFileName = null)
{
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
    CloudFileClient fileClient = storageAccount.CreateCloudFileClient();
    CloudFileShare share = fileClient.GetShareReference("organizations");
    CloudFileDirectory fileDirectory = share.GetRootDirectoryReference().GetDirectoryReference("Org_" + file.OrgId);

    // Get the file
    var azureFile = (CloudFile)fileDirectory.ListFilesAndDirectories().First(f => f.Uri.ToString() == file.FilePath);

    // Set up access policy so that the file can be viewed
    var sasConstraints = new SharedAccessFilePolicy();
    sasConstraints.SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-5);
    sasConstraints.SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(15);
    sasConstraints.Permissions = SharedAccessFilePermissions.Read;

    // Access token
    var sasFileToken = string.Empty;
    if (friendlyFileName != null){
        sasFileToken = azureFile.GetSharedAccessSignature(sasConstraints, new SharedAccessFileHeaders()
        {
            ContentDisposition = "attachment; filename=" + friendlyFileName
        });
    }
    else
    {
        sasFileToken = azureFile.GetSharedAccessSignature(sasConstraints);
    }

    // Return url to file with appended token
    return azureFile.Uri + sasFileToken;
}

“不支持条件标头”究竟是什么意思?

2 个答案:

答案 0 :(得分:3)

  

"究竟是什么意思?不支持条件标题"?

根据我的测试,您提到的代码中没有问题。根据Azure文件存储Get File API没有指定支持条件标头。因此,如果请求带有 If 条件标头,则Azure文件服务器不会接受该请求。它有时会发生在浏览器端,因为某些情况下的浏览器会附加if condition标头。

enter image description here

如果Azure blob可以接受,请尝试使用Azure blob。然后它将按预期工作。支持条件标头的get blob api

  

此操作还支持使用条件标头仅在满足指定条件时读取blob。有关更多信息,请参阅为Blob服务操作指定条件标头。

答案 1 :(得分:0)

我们遇到了类似的问题,我们开始在查询字符串中添加时间戳。由于每次调用都会更改时间戳,因此浏览器将不会缓存,因此不会遇到问题。尽管我同意blob可能是更好的解决方案,尤其是因为您使用Azure AD