【问题标题】:What is the correct way to send multiple pngs from an ASP.NET从 ASP.NET 发送多个 png 的正确方法是什么
【发布时间】:2023-02-21 23:23:54
【问题描述】:

我正在进行一个 API 调用,它应该返回一个 PNG 列表。我将 PNG 存储在 blob 存储中,并且能够成功获取它们。在过去,当我只需要返回一个图像时,我会将 blob 转换为内存流,然后只在客户端处理内存流。不过,这似乎不适用于多个文件。

[HttpGet("getThumbnails/{seriesId}")]
public async Task<ActionResult<List<MemoryStream>>> GetThumbnails(string seriesId)
{          
    var pngs = await _service.LoadPNGsMs(seriesId);

    Response.ContentType = "image/png ";
    return pngs;
}

public async Task<List<MemoryStream>> LoadPNGsMs(string seriesID)
{
    var returnList = new List<MemoryStream>();
    var blobls = await _azureBlobStorageService.GetBlockBlob(seriesID);

    foreach (var blob in blobls)
    {
            var stream = new MemoryStream();
            await blob.DownloadToStreamAsync(stream);
            stream.Position = 0;
            returnList.Add(stream);
    }
    return returnList;
}

public async Task<List<CloudBlockBlob>> GetBlockBlob(string seriesID)
{
    var blobFiles = containerClient.GetBlobs(prefix: seriesID);
    var blobFilePaths = blobFiles.Select(x => x.Name).ToList();
    List<CloudBlockBlob> cloudBlockBlobs = new List<CloudBlockBlob>();

    foreach (var blob in blobFilePaths)
    {
        CloudBlockBlob blockBlob = blobContainer.GetBlockBlobReference(blob);
        bool isExists = await blockBlob.ExistsAsync();
        if (isExists)
            cloudBlockBlobs.Add(blockBlob);
    }
    return cloudBlockBlobs;
}

运行此代码时出现 406。我是否将响应类型设置为 image/png 太多了?我应该只使用 blob 而忘记内存流吗?我会继续在这里玩这个,如果我发现任何东西,我会发布结果。

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    不要使用 List&lt;MemoryStream&gt;,而是使用 IEnumerable&lt;byte[]&gt; 并将每个 blob 写入字节数组。您的客户端将无法像您可能将内存流写到单个项目的响应中那样将内存流用于多个 blob。我也会把它改成

    public async Task&lt;ActionResult&lt;IEnumerable&lt;byte[]&gt;&gt;&gt; GetThumbnails(string seriesId)

    所以你可以yield return byte[]并提高客户端的吞吐量,同时减少服务器的整体内存消耗。

    【讨论】:

      猜你喜欢
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      • 2018-01-12
      • 2015-01-20
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      • 2016-06-28
      相关资源
      最近更新 更多