Как я могу отправить изображение в Интернете в сообщении XMPP (Jabber)?
В качестве интерфейса XMPP для чата Stack Overflow я в настоящее время беру HTML-код сообщений чата и преобразую его в действительный XML, а также устанавливаю его в качестве html
дочерний элемент XMPP message
объект. В моем Mac OS X Jabber-клиенте это работало отлично! Это означало, что когда пользователи в SO чате публиковали изображение в одном ящике, изображение появлялось в моем клиенте XMPP (Adium для OS X):
Однако я просто обновил Adium до последней версии, и, видимо, они сочли то, что я делал, дырой в безопасности и против спецификаций XMPP, и изменили это поведение. Их аргументация заключалась в том, что XMPP не должен раскрывать ваш IP-адрес, а получение изображения по HTTP показало бы мой IP-адрес.
Так что теперь чаты без изображения поверх XMPP. Как я могу заставить изображения работать поверх XMPP? Если мой компонент XMPP загрузит изображения и вставит их в <Message>
строфы? Могут ли изображения быть переданы через сервер XMPP? Или это невозможно?
3 ответа
Adium, iChat и Pidgin поддерживают XEP-0231, что позволяет отправлять двоичные данные, включая изображения, для этой цели. По сути, это позволяет вам указать уникальный идентификатор в качестве источника изображения, а затем другой клиент может решить, хочет ли он запросить данные в <iq>
запрос.
Я работал с этим в Python's Twisted, но встречался с некоторым разочарованием. Я знаю, что Adium и iChat, по крайней мере, используют его для запроса данных.
Попробуйте встроить его в данные: URI, как <img src="data:image/png;base64,VGhlIGltYWdlIGRhdGEgZ29lcyBoZXJlCg==" alt="some text" />
Просто идея...
Как насчет анализа URL-адресов изображений, загрузки изображений, помещения их во временную папку с именами файлов, представляющими исходные URL-адреса (имя файла может быть хешем исходного URL-адреса) и замены исходных URL-адресов в сообщениях для этих файловых URL-адресов?
Другая идея... иметь локальный сервер, который выбирает реальные URL?