2010-11-16 90 views
13

對於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聊天張貼oneboxed圖像中的用戶,圖像會在我的XMPP客戶端(Adium的爲OS X)顯示:如何在XMPP(Jabber)消息中發送Web上的圖像?

My Mind Is Blown

不過,我剛剛更新的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服務器進行代理?或者這是不可能的?

+2

說真的,我不明白這些人認爲IP是你應該保護的私人數據。如果您只知道知識產權就會受到攻擊,無論如何您都會受到攻擊。 – 2010-11-17 00:16:59

+0

我同意@Camilo。它嚴重削弱了以前聊天的真棒界面! – Josh 2010-11-17 01:17:02

回答

3

嘗試將它嵌入在a data: uri,像<img src="data:image/png;base64,VGhlIGltYWdlIGRhdGEgZ29lcyBoZXJlCg==" alt="some text" />

+0

這是一個好主意。我應該提到我嘗試過,但在Adium中顯示爲破碎的圖像:-( – Josh 2010-11-16 20:46:13

0

只是一個想法...

怎麼樣分析圖像的URL,下載圖像,將它們放入一個臨時文件夾與文件名代表原網址(文件名可能是原始URL的散列),並將郵件中的原始URL替換爲這些文件URL?

另一種想法...有一個本地服務器,獲取真正的URL?

+0

問題是,XMPP網橋在遠程服務器上運行,而不是在本地計算機上運行,​​因此一個'file:// URL我可以嘗試你的想法,而不是'file://',從URL:http:// URL的地址與XMPP服務器相同,但將那工作嗎? – Josh 2010-11-17 14:58:05

+0

我明白了,理論上是的 - 你可以在另一個端口設置一些快速捲曲,我想這是說我不是一個服務器端的人 – 2010-11-17 19:21:33

6

Adium,iChat和Pidgin全都支持XEP-0231,它允許您發送提供的二進制數據,包括用於此目的的圖像。基本上,它允許您指定一個唯一的標識符作爲圖像的來源,然後另一個客戶端可以決定他是否想要請求<iq>請求中的數據。

我一直在python的Twisted這個工作,但會遇到一些挫折。我做知道,Adium和iChat至少用它來請求數據。

+0

哇,看起來不錯,可能只是獎勵我需要選擇StackExchange XMPP聊天橋項目備份! – Josh 2011-10-08 17:16:22

+0

讓我知道如果你這樣做 - 據我所知,我已經實現了規範,但Google Talk顯然非常挑剔和/或混淆它的錯誤信息,我很樂意幫助/看看它是如何消除的! – 2011-10-08 19:36:12