Préface
Le contenu principal d'aujourd'hui est: les images des messages LayIM, le téléchargement de fichiers et l'amarrage, la surveillance de l'état des utilisateurs et la surveillance des utilisateurs en ligne de groupe. Je vais le présenter un par un ci-dessous.
Téléchargement d'image
Il existe de nombreux blogs sur les téléchargements de fichiers dans Spring Boot, et j'ai également extrait une partie du code. La partie de téléchargement est brièvement introduite, introduisant principalement les problèmes rencontrés pendant le processus de développement. Tout d'abord, jetons un coup d'œil à l'interface correspondante de Layim:
Layim.config ({// Upload Image Interface, uploadImage: {url: '/ upload / file'} // Upload File Interface, uploadfile: {url: '/ upload / file'} // autre code})Oui, c'est vrai, nous pouvons implémenter la fonction de l'envoi d'images et d'envoi de fichiers dans LayIm en écrivant deux interfaces. Je vais économiser des ennuis ici. Étant donné que Layim a jugé le type de fichier, j'utilise une seule interface de téléchargement ici. Le format retourné est:
{"Code": 0, "MSG": "Success", "Data": {"Src": "/ upload / d8740baa-cf7e-497c-a085-5c6ed9633f35.gif", "name": "8.gif"}}Le téléchargement du code est très simple. Obtenez le suffixe de fichier, générez le nom de GUID et enregistrez-le dans le dossier correspondant. Enfin, renvoyez les données de réponse que LayIm souhaite.
Au début, j'ai pensé à le passer directement au dossier / Resources / static / upload /. Plus tard, j'ai constaté que le chemin d'accès aura une situation 404 après le succès du téléchargement. La raison en est: même s'il y a ce fichier dans le dossier, mais il n'y a pas de dossier cible , il ne peut donc être recompilé et exécuté, donc cela ne fonctionnera certainement pas. J'ai donc cherché une solution. Plus tard, j'ai vu un moyen de le gérer, qui est de mapper chaque demande de fichier sur un chemin dans le contrôleur, puis d'utiliser le ResourceLoader pour trouver le fichier répondant. Le code est le suivant:
/ ** * CONFIGURATION PATH POUR LE FICHIER DE TÉLÉCHARGEMENT * * / @VALUE ("$ {Layim.upload.dir}") String privé FiledirPath; ResourceLoader final privé ResourceLoader; @Autowired Public UploadController (ResourceLoader ResourceLoader) {this.resourceLoader = ResourceLoader; }Obtenez le code de fichier, puis lorsque vous accédez à ce fichier, spécifiez le nom du fichier et la ressource renvoie la ressource correspondante en fonction du chemin.
/ ** * Accédez au chemin du fichier et utilisez ResourceLoader pour obtenir le fichier * * / @getmapping (value = "/ /filename:.+}") @ResponseBody Public Responsentity <?> GetFile (@pathvariable string filename) {try {string location = "file:" + paths.get (filedirpath, filename) .tostring ();); Resource Resource = ResourceLoader.getResource (emplacement); return réponsentity.ok (ressource); } catch (exception e) {return réponsentity.notfound (). build (); }}Jetez un œil à l'effet: (Afin de rencontrer le problème du téléchargement de la limitation de la taille du fichier lorsque vous faites des captures d'écran de démonstration pour tout le monde, modifiez simplement la configuration.)
HTTP: MultipART: MAX-FILE-Size: 30Mb Max-Request-Size: 30 Mo
La valeur de code ci-dessus est configurée comme: nom de fichier:. +, De sorte que si nous rencontrons une méthode comme /abc.jpg, nous correspondrons à la méthode GetFile. Ensuite, ResourceLoader nous aide à trouver le fichier. Mais pour en savoir plus, j'ai suivi le code source. Regardons d'abord la méthode GetResource dans le Defaultresourceloader.
@OverridePublic Resource getResource (emplacement de chaîne) {assert.notnull (emplacement, "l'emplacement ne doit pas être nul"); for (protococolresolver protococolresolver: this.protocolResolvers) {ressource ressource = protococolresolver.resolve (emplacement, this); if (ressource! = Null) {return Resource;}} (location.startswith ("/")) {return getResourceByPath (emplacement);} // Il s'agit de déterminer s'il faut aller à classpath: else if (location.startswith (classpath_url_prefix)) {return new ClassPathResource (emplacement.substring (classpath_url_prefix.Legth (), getClassHer ();} // Convertit enfin l'adresse de fichier en URL // Essayez d'analyser l'emplacement en tant qu'URL ... url url = new URL (emplacement); return new UrlResource (url);} catch (malformedUrlexception ex) {// no URL -> résoudre comme ressource path.return getResourceByPath (emplacement);}}}}Plus tard, lors de mon processus de débogage, j'ai constaté que par exemple, le chemin que j'ai accédé était /abc.gif, alors son arrière-plan serait converti en cette adresse: fichier: /// g: /javaproject/springbootlayim/upload/abc.gif. De même, il est également possible d'accéder en ouvrant cette adresse directement sur la machine. L'adresse (fichier: /// ..) ci-dessus est la valeur de Layout.upload.dir . De même, j'ai changé le dossier en ressources / static / téléchargement /, car, via ResourceLoader, il localise le fichier vers l'adresse physique du serveur.
Il n'y a même pas de dossier UPLAOD sous la cible, mais les fichiers sont toujours accessibles
Téléchargement de fichiers
Il utilise la même interface que l'image. La différence est que le téléchargement de fichiers volumineux nécessite de modifier la configuration. Il a été écrit ci-dessus et ne sera pas décrit en détail ici.
Statut en ligne de l'utilisateur
Dans la surveillance de l'état de Layim, il y a ceci:
// La commutation du puits de lumière du moniteur est LayIm.on ('Chatchange', fonction (res) {console.log (res.data);});En fait, lors de la lecture de la liste, l'utilisateur doit être chargé hors ligne. Cependant, voici seulement une démonstration. Lorsque la fenêtre change, vérifiez l'état du côté opposé. Ainsi, après le déclenchement de l'événement Chatchange, nous envoyons une demande au serveur.
var t = res.data.type == 'ami'; socket.send ({mtype: t? socket.mtype.checkisonline: socket.mtype.checkonlineCount, id: res.data.id});Il y a deux situations ci-dessus. Quand je discute seul, j'ai besoin de connaître le statut de l'autre partie. Le deuxième type est que pendant le chat de groupe, je veux savoir combien de personnes sont en ligne. J'ai donc fait une petite différence.
Ajoutez deux nouvelles classes de traitement des messages:
En fait, le code pour déterminer s'il est en ligne est le suivant:
ChannelContext CheckChannelContext = aio.getChannelContextByUserid (ChannelContext.getGroupContext (), Body.getID ()); // Vérifiez si en ligne booléen iSonline = CheckChannelContext! = Null &&! CheckChannelContext.isclosed ();
Ensuite à résumer le message au serveur. Le processus de message a été introduit dans l'implémentation du chat de groupe de chat unique, donc je ne vais pas entrer dans les détails ici.
Voici les moyens de déterminer le nombre de personnes dans le groupe:
SetWithlock <CanChatContext> Channellocks = AIO.getChannelContextsByGroup (ChannelContext.getGroupContext (), Body.getId ()); int onlineCount = channellocks.getObj (). size ();
Regardez l'effet, le volume de données est un peu petit, seulement deux utilisateurs, mais cela suffit pour une démonstration.
Après s'être connecté à un autre compte:
Résumer
Cet article n'est pas beaucoup de contenu, il s'agit simplement de télécharger un fichier et des applications simples d'API individuelles dans TIO. Cependant, ce qui m'excite, c'est que lorsque je débogage du code, j'ai trouvé beaucoup de choses jouables, comme cette chose:
Bien sûr, l'auteur l'a déjà introduit dans l'introduction du cadre et peut écouter le message envoyé par chaque client comme statistiques et autres choses. Ainsi, l'étape suivante consiste à utiliser ces données pour faire quelque chose.
Enfin, comme le reste est un historique de messages simple, une préservation des messages, une application d'ami et d'autres choses qui ajoutent, suppriment, modifier et vérifier, nous ne le présenterons pas trop à l'avenir. Je publierai un message après que le projet soit officiellement écrit. Ensuite, je vais jouer avec les données de T-IO ~~ (attendez, vous êtes-vous égaré? J'apprenais à l'origine Springboot ...)
Adresse du code: https://github.com/fanpan26/springbootlayim
Résumer
Ce qui précède est l'exemple de code pour Spring Boot + Layim + T-Io pour implémenter le téléchargement de fichiers et surveiller l'état de l'utilisateur que l'éditeur vous a présenté. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!