在 C# 中通过 Web 服务传输图像的最佳方法是什么?

发布于 2024-09-11 09:53:40 字数 81 浏览 5 评论 0原文

在 C# 中传输图像的最佳方法是什么?

  • 位图对象
  • 字节数组
  • 图像对象?

What is the best way to transfer an image in C#?

  • Bitmap object
  • Byte array
  • Image Object?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

浅唱ヾ落雨殇 2024-09-18 09:53:40

没有单一的“最佳”方法。如果有的话,那么可能就只有一种方法了。这实际上取决于您的情况、需求和优先事项。

也就是说,我一有机会就使用 Base64 编码,因为它很有趣而且简单! :)

There is no single "best" way. If there were, then there would probably be only one way. It really depends on your situation, needs, and priorities.

That said, I use Base64 encoding every chance I get because it's fun and easy! :)

蓝海似她心 2024-09-18 09:53:40

在 WCF 中,您可以从方法返回 Stream 对象:

public Stream GetImage(string name)
{ ... }

如果您有一个基于纯 SOAP 的协议,您将需要坚持使用 byte[] 等原语。这是一个性能不佳的选择,但确实没有更好的方法。您可能需要将文件分割为多个部分,才能适用于所有客户端。一些 SOAP 客户端不允许大型响应,因此我们过去常常将响应分成 30k 块。

传输图像的最佳方法是不使用上述任何一种方法,而是直接对图像执行 HTTP 请求并避免这一切。这就是我们现在使用的,没有编码,没有客户端处理,直接流式传输到磁盘。您必须检查您的具体用例以确定是否可以应用它。

In WCF you can return a Stream object from a method:

public Stream GetImage(string name)
{ ... }

If you have a pure SOAP based protocol you will need to stick to primitives like byte[]. This is a poor-performing option but there really isn't a better way. You may need to segment the file in multiple parts for this to work for all clients. Some SOAP clients will not allow large responses so we used to chunk the response into 30k pieces.

The best way to transfer the image is to not use either approach above, rather perform an HTTP request directly to the image and avoid all this. This is what we use now, no encoding, no client processing, streamed directly to disk. You'll have to examine your specific use case to determine if this can be applied.

几味少女 2024-09-18 09:53:40

我最近使用 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服务,但我相信您已经了解了总体想法=)

I've recently implemented this using a WCF service and chose to use Byte[] as the method of transporting the file, as it was quite simple to implement:

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;
}

The example above is simplified as I wasn't passing a filename directly to the WCF service, but I'm sure you get the general idea =)

守不住的情 2024-09-18 09:53:40

您还可以仅返回图像的 URL,然后让客户端对返回的 URL 进行原始 HTTP 调用以获取图像。

谢谢
虚拟机

You could also return just the URL to the image and then let the client make a raw HTTP call to the returned URL to fetch the image.

Thanks
VM

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文