Vorwort
Der heutige Hauptinhalt ist: Bilder in Layim -Nachrichten, Datei -Upload und Docking, Benutzerstatusüberwachung und Gruppen -Online -Benutzerüberwachung. Ich werde es nacheinander unten vorstellen.
Bild -Upload
Es gibt viele Blogs über Datei -Uploads im Spring -Boot, und ich habe auch einen Teil des Codes ausgerichtet. Der Upload -Teil wird kurz eingeführt, wobei hauptsächlich die während des Entwicklungsprozesses aufgetretenen Probleme eingeführt werden. Schauen wir uns zunächst die entsprechende Schnittstelle von Layim an:
layim.config ({// Bild -Schnittstelle hochladen, UploadImage: {url: '/upload/file'} // Dateischnittstelle hochladen, UploadFile: {url: '/upload/file'} // Sonstiger Code})Ja, das stimmt, wir können die Funktion des Sendens von Bildern und das Senden von Dateien in Layim durch das Schreiben von zwei Schnittstellen implementieren. Ich werde hier einige Probleme ersparen. Da Layim den Dateityp beurteilt hat, verwende ich hier nur eine Upload -Schnittstelle. Das zurückgegebene Format lautet:
{"Code": 0, "msg": "Erfolg", "Daten": {"src": "/upload/d8740baa-cf7e-497c-a085-5c6ed9633f35.gif", "Name": "8.gif"}}}}}}Das Hochladen des Codes ist sehr einfach. Holen Sie sich das Datei -Suffix, generieren Sie den Richtnamen und speichern Sie ihn im entsprechenden Ordner. Geben Sie schließlich die Antwortdaten zurück, die Layim will.
Zuerst habe ich darüber nachgedacht, es direkt an/Ressourcen/Static/Upload/Ordner zu übergeben. Später stellte ich fest, dass der Zugriffspfad nach dem Erfolg des Uploads eine Situation von 404 hat. Der Grund ist: Auch wenn es diese Datei im Ordner gibt, aber es gibt keinen Zielordner , sodass sie nur neu kompiliert und ausgeführt werden kann, sodass dies definitiv nicht funktioniert. Also suchte ich nach einer Lösung. Später sah ich einen Weg, um es zu handhaben, um jede Dateianforderung an einen Pfad im Controller zuzuordnen und dann mit dem Ressourcenoader die antwortende Datei zu finden. Der Code ist wie folgt:
/ *** Pfadkonfiguration zum Hochladen von Datei**/ @Value ("$ {layim.Upload.dir}") private String ffiledirpath; Private Final Resourceloader Resourceloader; @Autowired public uploadController (Resourceloader Resourceloader) {this.resourceloader = Resourceloader; }Rufen Sie den Dateicode ab und geben Sie beim Zugriff auf diese Datei den Dateinamen an, und die Ressource gibt die entsprechende Ressource gemäß dem Pfad zurück.
/*** Greifen Sie auf den Dateipfad zu und verwenden Sie den Ressourcenoader, um die Datei zu erhalten Resource Resource = Resourceloader.getResource (Ort); return responseentity.ok (Ressource); } catch (Ausnahme e) {return responseentity.notfound (). Build (); }}Schauen Sie sich den Effekt an: (Um das Problem der Hochladung der Dateigrößenbeschränkung beim Erstellen von Demonstrations -Screenshots für alle zu begegnen, ändern Sie einfach die Konfiguration.)
HTTP: Multipart: Max-File-Größe: 30 MB Max-Request-Größe: 30 MB
Der obige Codewert ist konfiguriert als: Dateiname:.+, Sodass wir mit der GetFile -Methode eine Methode wie /abc.jpg begegnen. Dann hilft uns Resourceloader dabei, die Datei zu finden. Aber um mehr zu erfahren, folgte ich dem Quellcode. Schauen wir uns zunächst die GetResource -Methode im Defaultresourceloader an.
@OverridePublic Resource getResource (String -Ort) {assert.notnull (Ort, "Ort darf nicht null sein"); für (Protocolresolver Protocolresolver: this.Protocolresolver) {Ressourcenressource = Protokolver.resolve (location ash). Datei: if (location.StartsWith ("/")) {return getResourcebypath (Ort);} // Dies soll bestimmen, ob Sie ClassPath gehen sollen: else if (location.Startswith (classpath_url_prefix)) {return New ClassPlesource (location.substring (classple_url_url_url_url_prefix.Legth ()). { // Finally convert the file address into url // Try to parse the location as a URL...URL url = new URL(location);return new UrlResource(url);}catch (MalformedURLException ex) {// No URL -> resolve as resource path.return getResourceByPath(location);}}}}Später, während meines Debugging -Prozesses, stellte ich fest, dass beispielsweise auf den Pfad, auf den ich zugegriffen habe, /abc.gif, sein Hintergrund in diese Adresse konvertiert werden würde: Datei: /// G: /javaproject/springbootlayim/upload/abc.gif. In ähnlicher Weise ist es auch möglich, auf diese Adresse direkt auf der Maschine zuzugreifen. Die Adresse (Datei: /// ..) oben ist der Wert von layout.Upload.dir . In ähnlicher Weise habe ich den Ordner in Ressourcen/static/Upload/geändert, da er über einen Ressourcenoader die Datei in die physische Adresse des Servers befindet.
Es gibt nicht einmal einen UPLAOD -Ordner unter Ziel, aber auf die Dateien können weiterhin zugegriffen werden
Datei -Upload
Es verwendet die gleiche Schnittstelle wie das Bild. Der Unterschied besteht darin, dass das Hochladen großer Dateien das Ändern der Konfiguration erfordert. Es wurde oben geschrieben und wird hier nicht ausführlich beschrieben.
Benutzer Online -Status
In der Statusüberwachung von Layim gibt es Folgendes:
// Wechseln des Überlagens des Monitors ist layim.on ('chatchange', function (res) {console.log (res.data);});Tatsächlich sollte der Benutzer beim Lesen der Liste offline geladen werden. Hier ist jedoch nur eine Demonstration. Wenn das Fenster schaltet, überprüfen Sie den Status der gegenüberliegenden Seite. Nachdem das Chatchange -Ereignis ausgelöst wurde, senden wir eine Anfrage an den Server.
var t = res.data.type == 'Freund'; Socket.Send ({mtype: t? Socket.Mtype.CheckisonLine: Socket.Mtype.CheckonlineCount, id: res.data.id});Es gibt zwei Situationen oben. Wenn ich alleine chatte, muss ich den Status der anderen Partei kennen. Der zweite Typ ist, dass ich während des Gruppenchates wissen möchte, wie viele Personen online sind. Also habe ich einen kleinen Unterschied gemacht.
Fügen Sie zwei neue Nachrichtenverarbeitungsklassen hinzu:
Tatsächlich ist der Code, um festzustellen, ob er online ist, wie folgt:
ChannelContext checkChannelContext = aio.getCanNeContextByUserID (ChannelContext.getGroupContext (), Body.getID ()); // Überprüfen Sie, ob online boolean isonline = checkChannelContext! = Null &&! CheckChannelContext.isclosed ();
Dann die Nachricht an den Server zurück integrieren. Der Nachrichtenprozess wurde in der Implementierung des Chat -Chat -Chat -Chat eingeführt, sodass ich hier nicht in Details eingehen werde.
Im Folgenden sind die Möglichkeiten zu bestimmen, wie viele Menschen in der Gruppe sind:
SetWithlock <SchanalContext> Channelocks = aio.getCanNeContextsByGroup (ChannelContext.getGroupContext (), body.getId ()); int onlineCount = Channellocks.getObj (). size ();
Schauen Sie sich den Effekt an, das Datenvolumen ist etwas klein, nur zwei Benutzer, aber es reicht immer noch für eine Demonstration aus.
Nach dem Anmelden bei einem anderen Konto:
Zusammenfassen
Dieser Artikel ist nicht viel Inhalt, sondern lädt nur eine Datei und einfache Anwendungen einzelner APIs in TiO hoch. Was mich jedoch erregt, ist, dass ich beim Debuggen des Codes viele spielbare Dinge gefunden habe, wie dieses Ding:
Natürlich hat der Autor es bereits in die Framework -Einführung eingeführt und kann die von jedem Kunden gesendete Nachricht als Statistik und andere Dinge anhören. Der nächste Schritt besteht also darin, diese Daten zu verwenden, um etwas zu tun.
Da der Rest ein einfacher Nachrichtenverlauf, die Erhaltung der Nachrichten, die Anwendung von Freunden und andere Dinge ist, die hinzufügen, löschen, ändern und überprüfen, werden wir ihn in Zukunft nicht zu viel vorstellen. Ich werde einen Beitrag veröffentlichen, nachdem das Projekt offiziell geschrieben wurde. Als nächstes werde ich mit den Daten in T-io ~~ spielen (warte, bist du in die Irre gegangen? Ich habe ursprünglich Springboot gelernt ...)
Codeadresse: https://github.com/fanpan26/springbootlayim
Zusammenfassen
Das obige ist der Beispielcode für Spring Start + Layim + T-IO, um das Datei-Upload zu implementieren und den Benutzerstatus zu überwachen, den der Editor Ihnen vorgestellt hat. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!