在 C# 中传输图像的最佳方法是什么?
- 位图对象
- 字节数组
- 图像对象?
没有单一的“最佳”方式。如果有,那么可能只有一种方法。这实际上取决于您的情况、需求和优先事项。
也就是说,我一有机会就使用 Base64 编码,因为它既有趣又简单!:)
在 WCF 中,您可以从方法返回 Stream 对象:
public Stream GetImage(string name)
{ ... }
如果你有一个纯粹的基于 SOAP 的协议,你将需要坚持像 byte[] 这样的原语。这是一个表现不佳的选择,但确实没有更好的方法。您可能需要将文件分割成多个部分,以使其适用于所有客户端。一些 SOAP 客户端不允许大响应,因此我们过去将响应分成 30k 块。
传输图像的最佳方法是不使用上述任何一种方法,而是直接对图像执行 HTTP 请求并避免所有这些。这就是我们现在使用的,没有编码,没有客户端处理,直接流式传输到磁盘。您必须检查您的特定用例以确定是否可以应用。
我最近使用 WCF 服务实现了这一点,并选择使用 Byte[] 作为传输文件的方法,因为它实现起来非常简单:
public byte[] DownloadFile(string fileName)
{
var stream = System.IO.File.OpenRead(fileName);
byte[] fileContent = new byte[stream.Length];
stream.Read(fileContent, 0, fileContent.Length);
return fileContent;
}
上面的示例被简化了,因为我没有将文件名直接传递给 WCF 服务,但我相信你明白了一般的想法 =)
您还可以只返回图像的 URL,然后让客户端对返回的 URL 进行原始 HTTP 调用以获取图像。
谢谢
虚拟机