我只是在练习在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;
}
答案 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;
}