مقدمة
المحتوى الرئيسي اليوم هو: الصور في رسائل Layim ، وتحميل الملفات والرسو ، ومراقبة حالة المستخدم ، ومراقبة المستخدمين عبر الإنترنت. سأقدمها واحدة تلو الأخرى أدناه.
تحميل الصورة
هناك العديد من المدونات حول تحميلات الملفات في Spring Boot ، وقد قمت أيضًا بإزالة بعض التعليمات البرمجية. يتم تقديم جزء التحميل لفترة وجيزة ، وذلك بشكل رئيسي تقديم المشكلات التي واجهتها أثناء عملية التطوير. أولاً ، دعونا نلقي نظرة على الواجهة المقابلة لـ Layim:
layim.config ({// upload interface ، uploadImage: {url: '/upload/file'} // endload interface file ، uploadfile: {url: '/upload/file'} // other code})نعم ، هذا صحيح ، يمكننا تنفيذ وظيفة إرسال الصور وإرسال الملفات في Layim عن طريق كتابة واجهتين. سأحفظ بعض المتاعب هنا. نظرًا لأن Layim قد حكمت على نوع الملف ، فأنا أستخدم واجهة تحميل واحدة فقط هنا. الشكل الذي تم إرجاعه هو:
{"Code": 0 ، "MSG": "Success" ، "Data": {"SRC": "/D8740BAA-CF7E-497C-A085-5C6ED9633F35.GIF" ، "name:" 8.gif "}}}}}تحميل الكود أمر بسيط للغاية. احصل على لاحقة الملف ، وقم بإنشاء اسم GUID ، وحفظه في المجلد المقابل. أخيرًا ، أعد بيانات الاستجابة التي يريدها Layim.
في البداية فكرت في نقله مباشرة إلى/الموارد/ثابت/تحميل/مجلد. في وقت لاحق ، وجدت أن مسار الوصول سيكون لديه موقف 404 بعد التحميل ناجح. والسبب هو: حتى لو كان هناك ملف في المجلد ، ولكن لا يوجد مجلد مستهدف ، لذلك لا يمكن إعادة تنسيقه وتشغيله إلا ، لذلك لن يعمل هذا بالتأكيد. لذلك بحثت عن حل. في وقت لاحق ، رأيت طريقة للتعامل معها ، والتي تتمثل في تعيين كل طلب ملف إلى مسار في وحدة التحكم ، ثم استخدم ResourceLoader للعثور على ملف الاستجابة. الرمز كما يلي:
/ *** تكوين المسار لتحميل ملف**/ value ("$ {layim.upload.dir}") سلسلة خاصة fileDirPath ؛ ResourceLoader النهائي الخاص ResourceLoader ؛ AUTOWIRED Public UploadController (ResourceLoader ResourceLoader) {this.resourceloader = resourceLoader ؛ }احصل على رمز الملف ، ثم عند الوصول إلى هذا الملف ، وتحديد اسم الملف ، وسيقوم المورد بإرجاع المورد المقابل وفقًا للمسار.
/*** الوصول إلى مسار الملف واستخدم ResourceLoader للحصول على الملف**/getMapping (value = "/{{filename:.+}") responsebody استجابة عامة <؟> getFile (pathvariable string filename) {try {String location = "file: مورد المورد = resourceLoader.getResource (الموقع) ؛ الإرجاع استجابة .وك (المورد) ؛ } catch (استثناء e) {return responseentity.notfound (). build () ؛ }}ألقِ نظرة على التأثير: (من أجل مواجهة مشكلة تحميل حجم الملف عند إنشاء لقطات توضيحية للجميع ، ما عليك سوى تغيير التكوين.)
http: multipart: max-file-size: 30 mb max-request-size: 30mb
تم تكوين قيمة الرمز أعلاه على النحو التالي: اسم الملف:+، بحيث إذا واجهنا طريقة مثل /abc.jpg ، فسنطابق طريقة getFile. ثم يساعدنا ResourceLoader في العثور على الملف. ولكن لمعرفة المزيد ، تابعت رمز المصدر. دعونا أولاً نلقي نظرة على طريقة getResource في sefaultresourceloader.
Overridepublic Resource GetResource (موقع السلسلة) {assert.notnull (الموقع ، "يجب ألا يكون الموقع فارغًا") ؛ لـ (protocolresolver protocolresolver: this.protocolresolvers) (location.startswith ("/")) {return getResourceByPath (location) ؛} // هذا هو تحديد ما إذا كان يجب GO classpath: else if (location.startswith (classpath_url_prefix)) {return new classpathresource يحاول عنوان الملف في url // تحليل الموقع كعنوان url ... url url = url new (location) ؛ إعادة urlresource new (url) ؛} catch (malformedUrlexception ex) {// no url -> regolode as resource path.redturn getResourceBypath (location) ؛}}}}}}}}}}}}}}}}}}}}}}}}}}}في وقت لاحق ، أثناء عملية التصحيح الخاصة بي ، وجدت أنه على سبيل المثال ، كان المسار الذي وصلت إليه هو/abc.gif ، ثم سيتم تحويل خلفيته إلى هذا العنوان: ملف: /// g: /javaproject/springbootlayim/upload/abc.gif. وبالمثل ، من الممكن أيضًا الوصول عن طريق فتح هذا العنوان مباشرة على الجهاز. العنوان (ملف: /// ..) أعلاه هو قيمة التصميم . وبالمثل ، قمت بتغيير المجلد إلى الموارد/ثابت/تحميل/، لأنه ، من خلال ResourceLoader ، يحدد موقع الملف على العنوان الفعلي للخادم.
لا يوجد حتى مجلد Uplaod تحت الهدف ، ولكن لا يزال من الممكن الوصول إلى الملفات
تحميل الملف
يستخدم نفس الواجهة مثل الصورة. الفرق هو أن تحميل الملفات الكبيرة يتطلب تغيير التكوين. لقد تم كتابته أعلاه ولن يتم وصفه بالتفصيل هنا.
حالة المستخدم على الانترنت
في مراقبة حالة لايم ، هناك:
// تبديل skylight الشاشة هو 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}) ؛هناك حالتان أعلاه. عندما الدردشة بمفردي ، أحتاج إلى معرفة حالة الطرف الآخر. النوع الثاني هو أنه أثناء الدردشة الجماعية ، أريد أن أعرف عدد الأشخاص عبر الإنترنت. لذلك جعلت فرقا قليلا.
أضف فئتين جديدتين لمعالجة الرسائل:
في الواقع ، فإن الرمز لتحديد ما إذا كان عبر الإنترنت هو كما يلي:
ChannelContext checkchannelContext = aio.getChannelContextByuserId (ChannelContext.getGroupContext () ، body.getid ()) ؛ // تحقق مما إذا كان isonline boolean عبر الإنترنت = checkchannelContext! = null &&! checkchannelContext.isclosed () ؛
ثم تغليف الرسالة مرة أخرى إلى الخادم. تم تقديم عملية الرسائل في تنفيذ دردشة مجموعة الدردشة المفردة ، لذلك لن أخوض في التفاصيل هنا.
فيما يلي طرق تحديد عدد الأشخاص الموجودين في المجموعة:
setWithlock <CannelconText> Channellocks = aio.getChannelContextsBygroup (ChannelContext.getGroupContext () ، body.getid ()) ؛ int onlinecount = Channellocks.getObj (). size () ؛
انظر إلى التأثير ، حجم البيانات صغير بعض الشيء ، اثنان فقط من المستخدمين ، لكنه لا يزال كافياً لتقديم عرض.
بعد تسجيل الدخول بحساب آخر:
لخص
هذه المقالة ليست الكثير من المحتوى ، فهي مجرد تحميل ملف وتطبيقات بسيطة لبرامج واجهات برمجة التطبيقات الفردية في TIO. ومع ذلك ، فإن ما يثيرني هو أنه عندما أقوم بتصحيح الكود ، وجدت الكثير من الأشياء القابلة للعب ، مثل هذا الشيء:
بالطبع ، قام المؤلف بتقديمه بالفعل في مقدمة الإطار ، ويمكنه الاستماع إلى الرسالة التي أرسلها كل عميل كإحصائيات وأشياء أخرى. لذا ، فإن الخطوة التالية هي استخدام هذه البيانات للقيام بشيء ما.
أخيرًا ، نظرًا لأن الباقي هو بعض سجل الرسائل البسيط ، الحفاظ على الرسائل ، تطبيق الأصدقاء وأشياء أخرى تضيف وحذف وتعديل والتحقق ، لن نقدمها كثيرًا في المستقبل. سأقوم بنشر منشور بعد كتابة المشروع رسميًا. بعد ذلك ، سألعب مع البيانات في T-IO ~~ (انتظر ، هل ضلت؟ كنت أتعلم في الأصل Springboot ...)
عنوان الرمز: https://github.com/fanpan26/springbootlayim
لخص
ما سبق هو رمز المثال الخاص بـ Spring Boot + Layim + T-IO لتنفيذ تحميل الملف ومراقبة حالة المستخدم التي قدمها المحرر إليك. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!