【问题标题】:How can I send an image on the web in an XMPP (Jabber) message?如何通过 XMPP (Jabber) 消息在 Web 上发送图像?
【发布时间】:2011-05-11 01:24:34
【问题描述】:

对于XMPP interface for the Stack Overflow chat,我目前是taking the HTML of the chat messages and converting to valid XML,并将其设置为XMPP message 对象的html 子元素。在我的 Mac OS X jabber 客户端中,这很好用!这意味着当 SO 聊天中的用户发布单框图像时,该图像将显示在我的 XMPP 客户端(OS X 的 Adium)中:

但是我刚刚将 Adium 更新到了最新版本,显然是 they considered what I was doing to be a security hole and against XMPP specs, and changed that behavior。他们的理由是 XMPP 不应该泄露你的 IP 地址,而通过 HTTP 获取图像会泄露我的 IP 地址。

所以现在聊天在 XMPP 上是无图像的。如何使图像在 XMPP 上工作?我的 XMPP 组件是否应该下载图像并将它们嵌入到<Message> 节中?图像可以通过 XMPP 服务器代理吗?或者这是不可能的?

【问题讨论】:

  • 说真的,我不明白这些认为 IP 是您应该保护的私有数据的人。如果你只知道你的 IP 就可以被攻击,那你就完蛋了。
  • 我同意@Camilo。它严重削弱了以前很棒的聊天界面!

标签: ruby security image xmpp xmpp4r


【解决方案1】:

Adium、iChat 和 Pidgin 都支持XEP-0231,它允许您为此目的发送提供的二进制数据,包括图像。基本上,它允许您指定一个唯一标识符作为图像的来源,然后其他客户端可以决定是否要在 <iq> 请求中请求数据。

我一直在 python 的Twisted 中处理这个问题,但遇到了一些挫折。我确实知道 Adium 和 iChat 至少使用它来请求数据。

【讨论】:

  • 哇,看起来棒极了,这可能正是我选择 StackExchange XMPP 聊天桥项目备份所需的动力!
  • 如果你这样做了,请告诉我——据我所知,我已经实现了规范,但 Google Talk 显然非常挑剔和/或对其错误消息感到困惑。我有兴趣提供帮助/看看结果如何!
【解决方案2】:

尝试将其嵌入a data: uri,例如<img src="data:image/png;base64,VGhlIGltYWdlIGRhdGEgZ29lcyBoZXJlCg==" alt="some text" />

【讨论】:

  • 这是个好主意。我应该提到我尝试过,但在 Adium 中显示为损坏的图像:-(
【解决方案3】:

只是一个想法......

如何解析图像 URL,下载图像,将它们放入临时文件夹,文件名代表原始 URL(文件名可以是原始 URL 的哈希),然后用消息中的原始 URL 替换这些文件网址?

另一个想法...拥有一个获取真实 URL 的本地服务器?

【讨论】:

  • 问题是,XMPP 桥在远程服务器上运行,而不是在我的本地机器上。所以file:// URL 不会让我到任何地方。我可以试试你的想法,但不是file://,而是从http:// URL 为它们提供服务,其中URL 的域与XMPP 服务器相同,但是,这行得通吗?
  • 我明白了。好吧,理论上是的——我猜你可以在另一个端口设置一些快速的 cURL。话虽如此,我不是服务器端的人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-04
  • 1970-01-01
相关资源
最近更新 更多