Как я могу отправить изображение в Интернете в сообщении XMPP (Jabber)? - PullRequest
13 голосов
/ 16 ноября 2010

Для XMPP-интерфейса для чата Stack Overflow я в настоящее время беру HTML-код сообщений чата и преобразую его в действительный XML , и задаю его как дочерний элемент htmlэлемент объекта XMPP message.В моем клиенте Mac OS X Jabber это работало отлично!Это означало, что, когда пользователи в чате SO публиковали изображение в одном ящике, изображение отображалось в моем XMPP-клиенте (Adium для OS X):

My Mind Is Blown

Однако я только что обновил Adiumдо последней версии и, очевидно, , они сочли то, что я делал, дырой в безопасности и против спецификаций XMPP, и изменили это поведение .Их причина была в том, что XMPP не должен раскрывать ваш IP-адрес, а получение изображения по HTTP показало бы мой IP-адрес.

Так что теперь чаты без изображения по XMPP.Как я могу заставить изображения работать поверх XMPP?Должен ли мой компонент XMPP загружать изображения и вставлять их в раздел <Message>?Могут ли изображения передаваться через сервер XMPP?Или это невозможно?

Ответы [ 3 ]

6 голосов
/ 08 октября 2011

Adium, iChat и Pidgin все поддерживают XEP-0231 , что позволяет отправлять двоичные данные, включая изображения, для этой цели.По сути, он позволяет вам указать уникальный идентификатор в качестве источника изображения, а затем другой клиент может решить, хочет ли он запросить данные в запросе <iq>.

, с которым я работалэто в Python Twisted , но встречается с некоторым разочарованием.Я знаю , что Adium и iChat по крайней мере используют его для запроса данных.

3 голосов
/ 16 ноября 2010

Попробуйте встроить его в данные: uri , например <img src="data:image/png;base64,VGhlIGltYWdlIGRhdGEgZ29lcyBoZXJlCg==" alt="some text" />

0 голосов
/ 17 ноября 2010

Просто идея ...

Как насчет анализа URL-адресов изображений, загрузки изображений, помещения их во временную папку с именами файлов, представляющими исходные URL-адреса (имя файла может быть хешем исходного URL-адреса), и заменой исходных URL-адресов в сообщениях для этого файла URL-адрес?

Еще одна идея ... иметь локальный сервер, который выбирает реальные URL-адреса?

...