C# REST响应尝试使用IMG或其他文件类型
我有一个问题,我有一个rest响应的例子,总是字符串,它假设下载文件的内容,但可能有很多不同的文件,例如PNG,现在如果我得到一个字符串作为响应,是否可以在最后将其转换回PNG,我尝试了以下方法:C# REST响应尝试使用IMG或其他文件类型,c#,rest,C#,Rest,我有一个问题,我有一个rest响应的例子,总是字符串,它假设下载文件的内容,但可能有很多不同的文件,例如PNG,现在如果我得到一个字符串作为响应,是否可以在最后将其转换回PNG,我尝试了以下方法: byte[] array = Encoding.ASCII.GetBytes(result.data); //response content MemoryStream ms = new MemoryStream(array); Image i = Image.FromStream(ms); 我不认
byte[] array = Encoding.ASCII.GetBytes(result.data); //response content
MemoryStream ms = new MemoryStream(array);
Image i = Image.FromStream(ms);
我不认为我从rest获得的base64字符串是这样的(其中的一部分,如果我remmebr base64以3==结尾,并且没有任何不可打印的字符):
�PNG\r\n\n\0\0\0\rIHDR\0\0�\0\0\0�\b\0\0\0���\0\0\0sRGB\0���\0\0\0gAMA\0\0��\v�a\0\0\0\tpHYs\0\0t\0\0t�fx\0\0\f\aIDATx^��!x�L���Jde%�yY�D�H$�d%2��s��高清%y� 假设您从API响应返回base64字符串,您可以执行如下操作
byte[] bytes = Convert.FromBase64String(result.data);
Image image;
using (MemoryStream ms = new MemoryStream(bytes))
{
image = Image.FromStream(ms);
}
return image;
或者您可以将其直接保存到文件中
string filePath = "Image.png";
File.WriteAllBytes(filePath, Convert.FromBase64String(result.data));
编辑1:
如何从web API返回数据?您可以这样做以返回字节数组,然后直接使用该数组写入流
var result = new HttpResponseMessage(HttpStatusCode.OK);
String filePath = HostingEnvironment.MapPath("~/imagename.png");
FileStream fileStream = new FileStream(filePath, FileMode.Open);
Image image = Image.FromStream(fileStream);
MemoryStream memoryStream = new MemoryStream();
image.Save(memoryStream, ImageFormat.Jpeg);
result.Content = new ByteArrayContent(memoryStream.ToArray());
result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");
return result;
在客户端,您可以执行以下操作
var data = response.Content.ReadAsByteArrayAsync().Result;
Image image;
using (MemoryStream ms = new MemoryStream(data))
{
image = Image.FromStream(ms);
}
return image;
请检查下面的编辑。我没有任何访问服务器端的权限。根据您在问题中提供的示例数据,您的API似乎正在返回字节数组。尝试一下我在上面的回答中提到的客户端代码。是的,我在这个代码的基础上做了一些修补,它成功了。