C# 向客户端应用程序发送图像的最有效方式是什么?

C# 向客户端应用程序发送图像的最有效方式是什么?,c#,base64,asp.net-core-2.0,C#,Base64,Asp.net Core 2.0,我有一个使用ASP.NET WEB API 2开发的现有REST API,它返回字节[],其中包含对客户端应用程序的图像响应。除了byte[]选项之外,我们还可以使用base64字符串作为响应发送给客户端以获取图像。但base64格式有其自身的局限性,可能不适合所有类型的图像(即不同尺寸的图像) 有谁能帮我了解一下,是否还有其他选项可以将映像返回到性能良好的客户端?首先,Base64在这种情况下是没有意义的。使用它的唯一原因是如果需要以基于文本的返回格式包含图像。例如,如果要返回JSON,并且希

我有一个使用ASP.NET WEB API 2开发的现有REST API,它返回字节[],其中包含对客户端应用程序的图像响应。除了byte[]选项之外,我们还可以使用base64字符串作为响应发送给客户端以获取图像。但base64格式有其自身的局限性,可能不适合所有类型的图像(即不同尺寸的图像)


有谁能帮我了解一下,是否还有其他选项可以将映像返回到性能良好的客户端?

首先,Base64在这种情况下是没有意义的。使用它的唯一原因是如果需要以基于文本的返回格式包含图像。例如,如果要返回JSON,并且希望将图像数据作为该JSON对象的成员包含在内,则需要进行Base64编码。除此之外,它对你毫无用处。事实上,Base64将使文件大小增加大约1.5倍,因为编码相同的数据需要更多的字符。因此,您实际上损害了性能


当谈到替代方案时,最终所有内容都是一个字节数组。图像是一种二进制格式,因此它始终只是字节的集合。这就是说,根据您在处理图像数据时所做的操作,返回流可能会更好。这将允许服务器直接将图像数据发送到客户端,而无需先将其加载到内存中。但是,只有当您一直在流媒体时,它才起作用。例如,如果您只是简单地将文件从服务器的文件系统返回到客户机,而不做任何修改,那么您可以将文件读入流并直接返回该流。然而,如果你正在操作图像,那么不管怎样,它都可能被完全加载到内存中,这意味着流式传输并不能真正为你带来任何东西。此时,您可以返回流或字节数组。

嗯,编码如何影响图像的维度?它本质上是一个字节数组?图像是一个字节数组,对此您无能为力。使用Base64只能使图像以ASCII表示,ASCII对性能没有影响,对用户没有任何价值。为了提高性能,您可以使用gzip压缩HTTP流和/或缓存映像请求的响应,因为映像可能不会经常更改。但是,这些都是与图像本身无关的一般提示。@Magnus FileStream结果是否会影响性能?最后,发送的数据量是相同的。据我所知,它只设置内容处置标题。@GeorgiGeorgiev除非你压缩它(通常对大多数图像都没有用处),否则发送的数据量总是相同的。但是您希望流式处理结果,而不是返回字节[]。避免将完整数据保存在内存中。感谢Chris的回复。我正在使用GraphQL.NET将现有的RESTAPI迁移到GraphQL解析器。现有REST API正在发送字节[]作为对客户端应用程序的响应。通过分析,我发现此时GraphQL.NET不支持字节[]()。因此,我的另一个选择是以base64格式发送数据。如果有任何更好的方法与我正在尝试做的相比,或者有任何方法可以进一步优化,那么在这种情况下,请帮助我了解更多细节。