【问题标题】:Silent failure on UploadFromStreamAsync to Azure StorageUploadFromStreamAsync 到 Azure 存储的静默失败
【发布时间】:2020-01-20 15:19:19
【问题描述】:

我正在向 Azure 存储上传一封电子邮件,但当我调用 UploadFromStreamAsync 时,我的进程失败了,但没有抛出任何错误

这是完整的功能:

    public async Task<string> UploadFileToStorage(IFormFile photo, AzureStorageConfig _storageConfig)
    {
        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(_storageConfig.ConnectionString);
        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
        CloudBlobContainer container = blobClient.GetContainerReference(_storageConfig.ImageContainer);
        var fileName = photo.FileName;
        CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName);
        blockBlob.Properties.ContentType = GetContentType(photo.FileName);
        blockBlob.Properties.CacheControl = "max-age=31536000";

        using (var stream = photo.OpenReadStream())
        {
            // Upload the file
            //await blockBlob.UploadFromByteArrayAsync(ReadFully(stream, blockBlob.StreamWriteSizeInBytes), 0, (int)stream.Length);
            await blockBlob.UploadFromStreamAsync(stream);
        }
        return await Task.FromResult(fileName);
    }

它在我同事的机器上运行良好,他使用 5.7 存储模拟器,我使用的是 5.10。不确定模拟器版本是否有问题?或者是其他东西?因为模拟器运行良好。

我在 .NET Core 2.2.0 解决方案中有它。

【问题讨论】:

  • .NET 2.2.0 soclution?你的意思是.Net-Core?此外,如果函数是 async-await,则确实不需要 return await Task.FromResult(fileName);,如果已经等待,只需返回结果 return fileName;
  • 原因可能是存储模拟器 5.10 是最新的,但您的 blob 存储客户端库较旧。您可以尝试使用最新的 blob 存储客户端库here

标签: c# asp.net-core azure-storage asp.net-core-2.2 azure-blob-storage


【解决方案1】:

一个可能的原因是 Blob 存储客户端库对您来说太旧了。

请使用存储模拟器 5.10 试用最新版本的 blob 存储客户端库 Microsoft.Azure.Storage.Blob 11.0.1

【讨论】:

    【解决方案2】:

    我解决了这个问题,删除了等待并在 UploadFromStreamAsync(stream) 之后使用 .Wait()。不可思议但真实。 显然你不能使用异步方法。

    【讨论】:

    • 这怎么明显?
    猜你喜欢
    • 1970-01-01
    • 2019-10-02
    • 2018-12-16
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 2015-11-03
    • 2017-01-10
    • 2018-09-30
    相关资源
    最近更新 更多