通过WCF中的API获取图像

问题描述 投票:0回答:3

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

[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

asp.net wcf
3个回答
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有关如何使用它们的一些示例。


0
投票

您可以直接使用浏览器查看图像。我写了类似于你的,可以成功显示图像。以下是我的代码。

    [WebGet(UriTemplate = "getImage")]
  Stream GetImage();

  public Stream GetImage()
    {

        WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpg";
        FileStream fs = File.OpenRead(HttpContext.Current.Server.MapPath("/boatbig.png"));
        return  fs ;
    }

我的web.config。

<endpointBehaviors>
  <behavior name="web">
      <webHttp automaticFormatSelectionEnabled="true"/>
    </behavior>
  </endpointBehaviors>
<service name="Service.Rest.RestService">
 <endpoint address="" contract="ServiceInterface.IRestService" binding="webHttpBinding"  behaviorConfiguration="web" ></endpoint> </service>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
  multipleSiteBindingsEnabled="true" />
 </system.serviceModel>

当我在浏览器中输入http://localhost:62193/RestService.svc/getImage时,图像显示enter image description here


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;
    }
© www.soinside.com 2019 - 2024. All rights reserved.