Предисловие
Основной контент сегодня: изображения в сообщениях Layim, загрузка файлов и стыковка, мониторинг статуса пользователя и мониторинг пользователей группы. Я представлю его один за другим ниже.
Загрузка изображения
Есть много блогов о загрузке файлов в Spring Boot, и я также вычислил некоторые коды. Часть загрузки кратко вводится, в основном представляя проблемы, возникающие в процессе разработки. Во -первых, давайте посмотрим на соответствующий интерфейс Layim:
layim.config ({// загружать интерфейс изображения, uploadimage: {url: '/upload/file'} // upload file interface, uploadfile: {url: '/upload/file'} // Другой код})Да, это верно, мы можем реализовать функцию отправки изображений и отправки файлов в Layim, написав два интерфейса. Я сэкономию некоторые проблемы здесь. Поскольку Layim оценил тип файла, я использую только один интерфейс загрузки здесь. Возвращенный формат:
{"code": 0, "msg": "успех", "data": {"src": "/upload/d8740baa-cf7e-497c-a085-5c6ed9633f35.gif", "name": "8.gif"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}Загрузить код очень проста. Получите суффикс файла, сгенерируйте имя наведения и сохраните его в соответствующую папку. Наконец, верните данные ответа, которые хочет Лэйм.
Сначала я подумал о том, чтобы напрямую передавать его/ресурсы/статическая/загрузка/папка. Позже я обнаружил, что путь доступа будет иметь ситуацию 404 после успешной загрузки. Причина в том, что в папке есть этот файл, но нет целевой папки , поэтому его можно только перекомпилировать и запустить, так что это определенно не будет работать. Итак, я искал решение. Позже я увидел способ обработки его, который должен отобразить каждый запрос файла по пути в контроллере, а затем использовал ресурс -загружатель, чтобы найти ответный файл. Код заключается в следующем:
/ *** Конфигурация пути для загрузки файла**/ @value ("$ {layim.upload.dir}") private String filedirPath; Частный окончательный ресурс -загрузчик ResourceLoader; @Autowired public uploadcontroller (resourceLoader resourceLoader) {this.resourceloader = resourceLoader; }Получите код файла, затем при доступе к этому файлу укажите имя файла, и ресурс вернет соответствующий ресурс в соответствии с пути.
/*** Доступ к пути файла и используйте ResourceLoader, чтобы получить файл**/@GetMaping (value = "/;filEname:.+}") @Responsebody public responseentity <?> GetFile (@pathvariable String fileename) {try {string location = "file:"+ paths.get (filedirpath, fileename) .tostring (); Ресурс ресурс = resourceloader.getresource (местоположение); return responseentity.ok (ресурс); } catch (Exception e) {return response.notfound (). build (); }}Взгляните на эффект: (чтобы столкнуться с проблемой загрузки ограничения размера файла при создании демонстрационных скриншотов для всех, просто измените конфигурацию.)
http: Multipart: Max-File-Size: 30 МБ максимального размера: 30 МБ
Приведенное выше значение кода настроено как: имя файла :.+, так что, если мы столкнулись с таком методом, как /Abc.jpg, мы будем соответствовать методу GetFile. Тогда ресурс -загрузчик помогает нам найти файл. Но чтобы узнать больше, я следил за исходным кодом. Давайте сначала посмотрим на метод GetResource в Defaultresourceloader.
@OverridePublic Resource getResource (строка местоположение) {assert.notnull (местоположение, «местоположение не должно быть нулевым»); для (протоколрезолверский протоколрозолвер: это. if (location.StartSwith ("/")) {return getResourceBypath (location);} // это должно определить, следует ли Go ClassPath: else if (location.StartSwith (classPath_url_prefix)) {return new classpathresource (location.substring (classpath_url_prefix {try {// Наконец -то преобразование адреса файла в URL // Попробуйте анализировать местоположение как URL ... url url = new URL (местоположение); вернуть новый Urlresource (url);} catch (malformedurlexception ex) {// no urlПозже, во время моего процесса отладки, я обнаружил, что, например, путь, которым я доступен, был/abc.gif, затем его фон будет преобразован в этот адрес: file: /// g: /javaproject/springbootlayim/upload/abc.gif. Точно так же можно также получить доступ, открыв этот адрес непосредственно на машине. Адрес (file: /// ..) выше - это значение mayout.upload.dir . Точно так же я изменил папку на ресурсы/статическую/загрузку/, потому что через ресурс -загрузчик он определяет файл на физический адрес сервера.
В целевой цели даже нет папки Uplaod, но файлы все еще можно получить
Загрузка файла
Он использует тот же интерфейс, что и изображение. Разница в том, что загрузка больших файлов требует изменения конфигурации. Он был написан выше и не будет описан подробно здесь.
Пользовательский онлайн статус
В мониторинге статуса Layim есть следующее:
// Переключение монитора в щиплом для светильника IS LayIm.on ('chatchange', function (res) {console.log (res.data);});На самом деле, при чтении списка пользователь должен быть загружен в автономном режиме. Однако здесь только демонстрация. Когда окно переключается, проверьте состояние противоположной стороны. Таким образом, после запуска события Chatchange мы отправляем запрос на сервер.
var t = res.data.type == 'friend'; socket.send ({mtype: t? socket.mtype.checkisonline: socket.mtype.checkonlinecount, id: res.data.id});Есть две ситуации выше. Когда я общаюсь в одиночку, мне нужно знать статус другой стороны. Второй тип заключается в том, что во время группового чата я хочу знать, сколько людей в сети. Так что я немного изменил.
Добавьте два новых класса обработки сообщений:
На самом деле, код, чтобы определить, является ли он онлайн, выглядит следующим образом:
CHANKENCONTEXT CHECKCHANLENTEXT = AIO.GETCHANLENTONTEXTBYUSERID (ChannelContext.getGroupContext (), body.getId ()); // Проверьте, является ли онлайн -логический isonline = CheckCannelContext! = Null &&! CheckCannelContext.isclosed ();
Затем инкапсулируйте сообщение обратно на сервер. Процесс сообщений был введен в реализации чата в отдельном чате, поэтому я не буду вдаваться в подробности здесь.
Ниже приведены способы определить, сколько людей в группе:
Setwithlock <namelcontext> channellocks = aio.getChannelContextSbyGroup (channelContext.getGroupContext (), body.getId ()); int onlinecount = channellocks.getobj (). size ();
Посмотрите на эффект, объем данных немного маленький, только два пользователя, но его все еще достаточно для демонстрации.
После входа в систему с другой учетной записью:
Суммировать
Эта статья не очень много, она просто загружает файл и простые приложения отдельных API в TIO. Однако меня волнует то, что когда я отлаживаю код, я нашел много играбельных вещей, таких как эта вещь:
Конечно, автор уже представил его во введении Framework и может выслушать сообщение, отправленное каждым клиентом в качестве статистики и других вещей. Итак, следующим шагом является использование этих данных, чтобы что -то сделать.
Наконец, поскольку остальное - это простая история сообщений, сохранение сообщений, приложение друга и другие вещи, которые добавляют, удаляют, изменяют и проверяют, мы не будем вводить его слишком много в будущем. Я опубликую сообщение после официального написания проекта. Далее я буду играть с данными в T-IO ~~ (подождите, вы сбились с пути? Я изначально изучал Springboot ...)
Кодовый адрес: https://github.com/fanpan26/springbootlayim
Суммировать
Выше приведен пример кода для Spring Boot + Layim + T-IO для реализации загрузки файлов и мониторинга статуса пользователя, который редактор представил вам. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!