将IRestResponse转换为“image / jpg”文件

时间:2017-07-06 19:24:54

标签: c# bitmap asp.net-core rest-client

我正在尝试从API中提取图像并通过File()方法返回DOM。

这是我到目前为止所拥有的......

HomeController.cs

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult ImageFromPath()
    {
        var client = new RestClient("http://{{MYIPADDRESS}}/cgi-bin/snapshot.cgi?channel0=");
        var request = new RestRequest(Method.GET);
        request.AddHeader("postman-token", "random-postman-token");
        request.AddHeader("cache-control", "no-cache");
        request.AddHeader("authorization", "Digest username=\"MYUSERNAME\", realm=\"MYENCRYPTEDPASS\", nonce=\"LONGSTRING\", uri=\"/cgi-bin/snapshot.cgi?channel0\", response=\"RESPONSESTRING\", opaque=\"\"");
        IRestResponse response = client.Execute(request);(response.RawBytes);

        return File(response, "image/jpg");
    }
}

这里唯一的问题是,return语句response上的错误显示

  

无法从'RestSharp.IRestResponse'转换为'byte []'

当我从本地文件系统中提取图像时,它更容易操作,这是我HomeController.cs的工作代码

public ActionResult ImageFromPath(string path)
{
    var ms = new MemoryStream();
    using (Bitmap bitmap = new Bitmap(path))
    {
        var height = bitmap.Size.Height;
        var width = bitmap.Size.Width;

        bitmap.Save(ms, ImageFormat.Jpeg);
    }

    ms.Position = 0;
    return File(ms, "image/jpg");
}

以下是我在前端(Index.cshtml)拉动它的方式:

<img src="@Url.Action("ImageFromPath", new { path = Request.MapPath("~/img/1.jpg") })" />

1 个答案:

答案 0 :(得分:1)

这一行:

return File(response, "image/jpg");

您正在传递response IRestResponse类型(来自RestSharp的类型)。

为什么内置的MVC File方法知道RestSharp? File() takes a byte array and a string MIME type

尝试:

return File(response.RawBytes, "image/jpg");

RawBytes是来自HTTP请求的原始响应的字节数组。如果您的API返回图像的字节数组,则需要将其传递给文件方法。