【发布时间】:2011-03-20 12:39:54
【问题描述】:
在 C# 中传输图像的最佳方法是什么?
- 位图对象
- 字节数组
- 图像对象?
【问题讨论】:
-
您指的是哪种网络服务?旧版“.asmx”服务还是 WCF“.svc”服务?
标签: c# image web-services bitmap transfer
在 C# 中传输图像的最佳方法是什么?
【问题讨论】:
标签: c# image web-services bitmap transfer
没有单一的“最佳”方式。如果有,那么可能只有一种方法。这实际上取决于您的情况、需求和优先事项。
也就是说,我一有机会就使用 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 调用以获取图像。
谢谢
虚拟机
【讨论】: