通过WCF中的API获取图像

时间:2019-03-12 06:37:45

标签: asp.net wcf

我只是在练习在WCF中通过API发送数据,当我尝试发送图像时,我的状态为200,但没有获得图像和一些奇怪的数据。有人可以帮我解决问题。

[OperationContract]
    [WebInvoke(Method = "GET",
              RequestFormat = WebMessageFormat.Json,
              ResponseFormat = WebMessageFormat.Json,
              BodyStyle = WebMessageBodyStyle.WrappedRequest,
             UriTemplate = "getphoto")]
    Stream GetImage();

public Stream GetImage()
    {
        FileStream ds = File.OpenRead("D:/pic.jpg");
        WebOperationContext.Current.OutgoingRequest.ContentType = "image/jpg";
        return ds;
    }

enter image description here

2 个答案:

答案 0 :(得分:0)

这是我的两分钱,你怎么做,

发送字节数组而不是发送流(流有很多问题,尤其是在寻找数据,不可搜索等方面)

您可以尝试

public byte[] GetByteArrayFromImage(System.Drawing.Image image)//your image location
{
   using (var ms = new MemoryStream())
   {
      imageIn.Save(ms,imageIn.RawFormat);
      return  ms.ToArray();
   }
}

返回Image数组,当您使用数据时,可以检查图像是否有效,然后也可以将其转换回图像

添加了代码以返回图像


如果是从ASPNET网站调用的,则有几种显示图像的方法

using (var ms = new MemoryStream(byteArrayIn))
{
    return Image.FromStream(ms);
}

上面的代码将返回来自字节的图像,然后在您的后端,您将有一个ActionResult(不确定是否适合Angular,因为我之前没有使用过它)将返回图像

然后您就可以放弃顶级代码,而只需

return new FileContentResult(byteArray, "image/jpeg");

并返回FileResult,这将使您的IMG src标记为

<img id="someImage" src='@Url.Action("getsomeimage", "somecontrollername", new {id ="if you have a need for some parameters, add here"})' />

如果您只想对图像进行base64编码,则可以使用

string base64String = Convert.ToBase64String(imageBytes);
        return base64String;

设置为图像中的SRC的图像,您将需要在actionResult方法中创建与上述几乎相同的方法,并立即返回一个字符串

第三部分稍微复杂一点,但是会为您提供更大的灵活性,它将创建一个TagHelper,该渲染器将在给定一些信息的情况下呈现img标签

https://www.codeproject.com/Articles/853835/TagHelpers上查看一些使用方法的示例。

答案 1 :(得分:0)

我有解决方案,但错误是使用OutgoingRequest而不是OutgoingResponse

[OperationContract]
    [WebInvoke(Method = "GET",
              RequestFormat = WebMessageFormat.Json,
              ResponseFormat = WebMessageFormat.Json,
              BodyStyle = WebMessageBodyStyle.WrappedRequest,
             UriTemplate = "getphoto")]
    Stream GetImage();

public Stream GetImage()
    {
        FileStream ds = File.OpenRead("D:/pic.jpg");
        WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpg";
        return ds;
    }