我正在制作Web Api,我需要将多个图像返回给客户端。我目前正在为每个图像使用Base64字符串,但这导致每个请求花费的时间太长。是否有更好,更有效的图像返回方式?
这是我正在使用的代码:
控制器:
public LearningUnits GetLearningUnits([FromODataUri]Guid key)
{
var record = db.LearningUnits.SingleOrDefault(inst => inst.LearningUnitId == key);
record.ImageURLPath = ImageHandler.ImageToByteArrayFromFilePath(record.ImageURLPath);
return record;
}
ImageToByteArray方法:
public static string ImageToByteArrayFromFilePath(string imagefilePath)
{
byte[] imageArray = File.ReadAllBytes(imagefilePath);
string baseImage = Convert.ToBase64String(imageArray);
return baseImage;
}
答案 0 :(得分:1)
如果端点返回json,那么除base64
之外没有其他方法可以在响应中嵌入二进制文件。但由于性能问题,这绝对是一个坏主意。可能对某些图标来说没关系,但对于较大的图像则不合适。
所以这里最好的解决方案是将url返回到图像。并且客户端将进一步请求获取图像的原始字节。
另外值得一提的是,图片网址不仅可以是静态文件的路径,还可以是某个webapi端点的路径,例如,通过资源ID获取图像字节并发送客户端原始二进制文件返回,而不是json字符串。
答案 1 :(得分:0)
解决方案是使用媒体格式化程序,以便在使用特定类型查询Web API时,您将接收特定类型的实际二进制流。
http://www.asp.net/web-api/overview/formats-and-model-binding/media-formatters
这是标准的RESTful模式;您有相同的URL,但是当您需要数据的JSON记录时,您接受类型:application / json,但是当您需要该媒体类型时,您可以将MIME请求类型更改为image / png或类似内容。
更多信息可以在这里找到: How to provide custom mediatype formats for OData Api