我只是练习在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;
}
关于你如何做到这一点我的两分钱,
而不是发回一个流,发送一个字节数组(流有很多问题,尤其是寻找数据,无法搜索等)
你可以试试
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有关如何使用它们的一些示例。
您可以直接使用浏览器查看图像。我写了类似于你的,可以成功显示图像。以下是我的代码。
[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时,图像显示
我得到了解决方案,错误是使用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;
}