我正在编写v2 Azure函数,在其中我将访问Azure Blob存储。因为遇到麻烦,所以将其简化为这个最小的示例。
namespace Test
{
public static class Function1
{
[FunctionName("Function1")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "test")] HttpRequest req,
ILogger log)
{
var azureStorage = CloudStorageAccount.Parse("UseDevelopmentStorage=true");
var blobClient = azureStorage.CreateCloudBlobClient();
var container = blobClient.GetContainerReference("migrated-load-sets-localhost");
var blobReference = container.GetBlockBlobReference("11016093-2f6e-4631-97c1-04f8acfb2370");
var memoryStream = new MemoryStream();
var accessCondition = AccessCondition.GenerateIfExistsCondition();
var blobRequestOptions = new BlobRequestOptions();
await blobReference.DownloadToStreamAsync(memoryStream, accessCondition, blobRequestOptions, null);
var text = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray());
return new OkObjectResult(text);
}
}
}
当我跑步并撞到这个时,我得到了错误
System.Private.CoreLib:执行函数Function1时发生异常。 Microsoft.WindowsAzure.Storage:值'*'的格式无效。 System.Net.Http:值'*'的格式无效。
如果我改变
var accessCondition = AccessCondition.GenerateIfExistsCondition();
成为
var accessCondition = AccessCondition.GenerateEmptyCondition();
有用。
我在调试中观察到
accessCondition.IfMatchETag
等于"*"
,所以看来这可能是罪魁祸首。使用
AccessCondition.GenerateIfExistsCondition()
时我做错什么了吗,还是库中有错误? 最佳答案
如果您需要在下载文件之前检查blob是否存在,则所需要做的只是
if(blobReference.ExistsAsync())
{
//Download
}