1

ファイルまたはブロブ ストレージから画像を読み取り、それをストリームとして base64 エンコードしてから、そのストリームを StreamContent に渡したいと考えています。次のコードはタイムアウトします。

[HttpGet, Route("{id}", Name = "GetImage")]
public HttpResponseMessage GetImage([FromUri] ImageRequest request)
{
   var filePath = HostingEnvironment.MapPath("~/Areas/API/Images/Mr-Bean-Drivers-License.jpg");
   HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
   var stream = new FileStream(filePath, FileMode.Open);
   var cryptoStream = new CryptoStream(stream, new ToBase64Transform(), CryptoStreamMode.Write);
   result.Content = new StreamContent(cryptoStream);
   result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");

   return result;
}

ファイルをストリームとして保持せずに次のコードを機能させ、すべてをメモリに読み込むことができますが、それは避けたいと思います。

HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
using (var fileStream = new FileStream(filePath, FileMode.Open))
{
    using (var image = Image.FromStream(fileStream))
    {
        var memoryStream = new MemoryStream();
        image.Save(memoryStream, image.RawFormat);

        byte[] imageBytes = memoryStream.ToArray();

        var base64String = Convert.ToBase64String(imageBytes);
        result.Content = new StringContent(base64String);
        result.Content.Headers.ContentType = new MediaTypeHeaderValue("text/plain");
        return result;
    }
}
4

1 に答える 1