Kata pengantar
Konten utama saat ini adalah: gambar dalam pesan layim, unggahan file dan docking, pemantauan status pengguna, dan grup pemantauan pengguna online. Saya akan memperkenalkannya satu per satu di bawah ini.
Unggahan gambar
Ada banyak blog tentang unggahan file di Spring Boot, dan saya juga telah mengutip beberapa kode. Bagian unggahan diperkenalkan secara singkat, terutama memperkenalkan masalah yang dihadapi selama proses pengembangan. Pertama, mari kita lihat antarmuka Layim yang sesuai:
layim.config ({// unggah antarmuka gambar, unggahimage: {url: '/unggah/file'} // unggah antarmuka file, unggahfile: {url: '/unggah/file'} // kode lain})Ya, itu benar, kami dapat menerapkan fungsi mengirim gambar dan mengirim file di Layim dengan menulis dua antarmuka. Saya akan menyimpan beberapa masalah di sini. Karena Layim telah menilai jenis file, saya hanya menggunakan satu antarmuka unggahan di sini. Format yang dikembalikan adalah:
{"kode": 0, "msg": "success", "data": {"src": "/unggah/d8740baa-cf7e-497c-a085-5c6ed9633f355.gif", "nama": "8.gif"}}}Mengunggah kodenya sangat sederhana. Dapatkan sufiks file, buat nama GUID, dan simpan ke folder yang sesuai. Akhirnya, kembalikan data respons yang diinginkan Layim.
Pada awalnya saya berpikir untuk langsung meneruskannya ke/sumber daya/statis/unggah/folder. Kemudian, saya menemukan bahwa jalur akses akan memiliki situasi 404 setelah unggahan berhasil. Alasannya adalah: bahkan jika ada file itu di folder, tetapi tidak ada folder target , sehingga hanya dapat dikompilasi ulang dan dijalankan, jadi ini pasti tidak akan berfungsi. Jadi saya mencari solusi. Kemudian saya melihat cara untuk menanganinya, yaitu memetakan setiap permintaan file ke jalur di pengontrol, dan kemudian menggunakan sumber daya untuk menemukan file yang merespons. Kodenya adalah sebagai berikut:
/ *** Konfigurasi jalur untuk mengunggah file**/ @value ("$ {layim.upload.dir}") Private String FileDirPath; sumber daya sumber daya final final swasta; @Autowired public unggahController (Resourceloader Resourceloader) {this.Resourceloader = Resourceloader; }Dapatkan kode file, lalu saat mengakses file itu, tentukan nama file, dan sumber daya akan mengembalikan sumber daya yang sesuai sesuai dengan jalur.
/*** Akses jalur file dan gunakan sumber daya sumber daya untuk mendapatkan file**/@getMapping (value = "/{FileName:.+}") @ResponseBody Public Responentity <?> GetFile (@pathvariable string file) {try {string location = "file:"+ paths.get (filedirpath, file name) {string). Sumber Daya Sumber Daya = Resourceloader.GetResource (Lokasi); return responseentity.ok (sumber daya); } catch (exception e) {return responseentity.notfound (). build (); }}Lihatlah efeknya: (Untuk menghadapi masalah mengunggah batasan ukuran file saat membuat screenshot demonstrasi untuk semua orang, cukup ubah konfigurasi.)
HTTP: Multipart: Max-File-Ukuran: 30MB Max-Request-Size: 30MB
Nilai kode di atas dikonfigurasi sebagai: nama file :.+, sehingga jika kita menemukan metode seperti /abc.jpg, kita akan mencocokkan metode getFile. Kemudian Resourceloader membantu kami menemukan file tersebut. Tetapi untuk mempelajari lebih lanjut, saya mengikuti kode sumber. Pertama -tama mari kita lihat metode GetResource di defaultresourceloader.
@Overridepublic Resource GetResource (Lokasi String) {Assert.notnull (lokasi, "Lokasi tidak boleh nol"); untuk (protocolresolver protocolresolver: this.protocolResolvers {Sumber) {sumber daya = protocolresolver: Lokasi (lokasi, ini); IF); File: if (location.startswith ("/")) {return getResourceByPath (location);} // Ini untuk menentukan apakah akan pergi classpath: else if (location.startswith (classpath_url_path) {return classpathResource (location.substring (classpath_path_) (classPathREXT (location.substring (classpath_pathl) (classPathREXT (location.substring (classpath_pathl) (classPathREX (location.substring (classpath_pathl) (classpathy (location.substring (classpath_path_) (classPathREX (location. {Coba {// Akhirnya ubah alamat file menjadi url // coba piringan lokasi sebagai url ... url url = url baru (lokasi); return new urlResource (url);} catch (malformedurlexception ex) {// no url -> resolve sebagai sumber daya.Kemudian, selama proses debugging saya, saya menemukan bahwa misalnya, jalur yang saya akses adalah /abc.gif, maka latar belakangnya akan dikonversi ke alamat ini: file: /// g: /javaproject/springbootlayim/upload/abc.gif. Jadi demikian juga, dimungkinkan juga untuk mengakses dengan membuka alamat ini langsung di mesin. Alamat (file: /// ..) di atas adalah nilai tata letak.upload.dir . Demikian pula, saya mengubah folder menjadi sumber daya/statis/unggah/, karena, melalui sumber daya, ia menempatkan file ke alamat fisik server.
Bahkan tidak ada folder uplaod di bawah target, tetapi file masih dapat diakses
Unggahan file
Ini menggunakan antarmuka yang sama dengan gambar. Perbedaannya adalah mengunggah file besar membutuhkan mengubah konfigurasi. Telah ditulis di atas dan tidak akan dijelaskan secara rinci di sini.
Status online pengguna
Dalam pemantauan status Layim, ada ini:
// Mengganti monitor skylight adalah layim.on ('chatchange', function (res) {console.log (res.data);});Bahkan, saat membaca daftar, pengguna harus dimuat secara offline. Namun, ini hanya demonstrasi. Saat jendela beralih, periksa status sisi yang berlawanan. Jadi, setelah acara chatchange dipicu, kami mengirim permintaan ke server.
var t = res.data.type == 'friend'; socket.send ({mType: t? socket.mtype.checkisonline: socket.mtype.checkonlinecount, id: res.data.id});Ada dua situasi di atas. Ketika saya mengobrol sendirian, saya perlu mengetahui status pihak lain. Tipe kedua adalah selama obrolan grup, saya ingin tahu berapa banyak orang yang online. Jadi saya membuat sedikit perbedaan.
Tambahkan dua kelas pemrosesan pesan baru:
Bahkan, kode untuk menentukan apakah itu online adalah sebagai berikut:
ChannelContext checkChannelContext = aio.getChannelContextByUserId (channelContext.getGroupContext (), body.getId ()); // periksa apakah boolean online iSonline = checkChannelContext! = Null &&! CheckChannelContext.isclosed ();
Kemudian merangkum pesan kembali ke server. Proses pesan telah diperkenalkan dalam implementasi obrolan grup obrolan tunggal, jadi saya tidak akan membahas detailnya di sini.
Berikut ini adalah cara untuk menentukan berapa banyak orang dalam kelompok:
SetWithLock <Sal- channelContext> channellocks = aio.getChannelContextSByGroup (channelContext.getGroupContext (), body.getId ()); int onlinecount = channellocks.getobj (). size ();
Lihatlah efeknya, volume data agak kecil, hanya dua pengguna, tetapi masih cukup untuk demonstrasi.
Setelah masuk dengan akun lain:
Meringkaskan
Artikel ini tidak banyak konten, hanya mengunggah file dan aplikasi sederhana API individu di TIO. Namun, yang menggairahkan saya adalah bahwa ketika saya men -debug kode, saya menemukan banyak hal yang dapat dimainkan, seperti hal ini:
Tentu saja, penulis telah memperkenalkannya dalam Pendahuluan Kerangka, dan dapat mendengarkan pesan yang dikirim oleh setiap klien sebagai statistik dan hal -hal lain. Jadi, langkah selanjutnya adalah menggunakan data ini untuk melakukan sesuatu.
Akhirnya, karena sisanya adalah beberapa riwayat pesan sederhana, pelestarian pesan, aplikasi teman dan hal -hal lain yang menambah, menghapus, memodifikasi, dan memeriksa, kami tidak akan terlalu memperkenalkannya di masa depan. Saya akan memposting posting setelah proyek secara resmi ditulis. Selanjutnya, saya akan bermain dengan data di T-io ~~ (tunggu, apakah Anda tersesat? Saya awalnya belajar Springboot ...)
Alamat kode: https://github.com/fanpan26/springbootlayim
Meringkaskan
Di atas adalah kode contoh untuk Spring Boot + Layim + T-IO untuk mengimplementasikan pengunggahan file dan memantau status pengguna yang diperkenalkan oleh editor kepada Anda. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!