คำนำ
เนื้อหาหลักของวันนี้คือ: รูปภาพในข้อความ layim, การอัปโหลดไฟล์และการเชื่อมต่อ, การตรวจสอบสถานะผู้ใช้และการตรวจสอบผู้ใช้ออนไลน์กลุ่ม ฉันจะแนะนำมันทีละด้านด้านล่าง
อัพโหลดรูปภาพ
มีบล็อกมากมายเกี่ยวกับการอัปโหลดไฟล์ใน Spring Boot และฉันยังได้ตัดข้อความบางส่วนของรหัส ส่วนการอัปโหลดถูกนำเสนอสั้น ๆ โดยส่วนใหญ่แนะนำปัญหาที่พบในระหว่างกระบวนการพัฒนา ก่อนอื่นมาดูที่อินเทอร์เฟซที่เกี่ยวข้องของ layim:
layim.config ({// อัปโหลดอินเตอร์เฟสภาพ, uploadimage: {url: '/upload/file'} // อัปโหลดอินเทอร์เฟซไฟล์, uploadfile: {url: '/upload/file'} // รหัสอื่น ๆ })ใช่ถูกต้องเราสามารถใช้ฟังก์ชั่นการส่งรูปภาพและส่งไฟล์ใน layim โดยการเขียนสองอินเทอร์เฟซ ฉันจะบันทึกปัญหาที่นี่ เนื่องจาก Layim ได้ตัดสินประเภทไฟล์ฉันใช้อินเทอร์เฟซอัปโหลดเพียงครั้งเดียวที่นี่ รูปแบบที่ส่งคืนคือ:
{"รหัส": 0, "msg": "ความสำเร็จ", "data": {"src": "/อัปโหลด/d8740baa-cf7e-497c-a085-5c6ed9633f35.gif", "ชื่อ": "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 ResponseEntity สาธารณะ <?> getFile (@PathVariable String filename) {ลอง {สตริงตำแหน่ง = "ไฟล์ ทรัพยากรทรัพยากร = ResourceLoader.getResource (ตำแหน่ง); return responseEntity.ok (ทรัพยากร); } catch (exception e) {return responseEntity.notfound (). build (); -ลองดูที่เอฟเฟกต์: (เพื่อที่จะพบปัญหาของการอัปโหลดข้อ จำกัด ขนาดไฟล์เมื่อทำภาพหน้าจอสาธิตสำหรับทุกคนเพียงแค่เปลี่ยนการกำหนดค่า)
http: multipart: ขนาดสูงสุด: 30MB สูงสุด-request-size: 30MB
ค่ารหัสด้านบนถูกกำหนดค่าเป็น: ชื่อไฟล์:.+ดังนั้นหากเราพบวิธีการเช่น /abc.jpg เราจะจับคู่วิธี getFile จากนั้น ResourceLoader จะช่วยให้เราค้นหาไฟล์ แต่เพื่อเรียนรู้เพิ่มเติมฉันติดตามซอร์สโค้ด ก่อนอื่นให้ดูที่วิธี getResource ใน defaultresourceLoader
@OverridePublic Resource getResource (ตำแหน่งสตริง) {assert.notnull (ตำแหน่ง "ตำแหน่งจะต้องไม่เป็นโมฆะ"); สำหรับ (ProtocolResolver ProtocolResolver: this.protocolresolvers) {ทรัพยากรทรัพยากร = protocolresolver.resolve (location.startswith ("/")) {return getResourceBypath (ตำแหน่ง);} // นี่คือการพิจารณาว่าจะไป classpath: อื่น ๆ ถ้า (location.startswith (classpath_url_prefix)) {กลับ classpathresource ใหม่ (location.substring แปลงที่อยู่ไฟล์เป็น URL // พยายามแยกวิเคราะห์ตำแหน่งเป็น URL ... url url = url ใหม่ (ตำแหน่ง); ส่งคืน urlresource ใหม่ (url);} catch (malformedurlexception ex) {// ไม่มี url -> แก้ไขเป็นเส้นทางทรัพยากรต่อมาในระหว่างขั้นตอนการดีบักของฉันฉันพบว่าตัวอย่างเช่นเส้นทางที่ฉันเข้าถึงคือ /abc.gif จากนั้นพื้นหลังของมันจะถูกแปลงเป็นที่อยู่นี้: ไฟล์: /// g:/javaproject/springbootlayim/upc.gif ในทำนองเดียวกันก็เป็นไปได้ที่จะเข้าถึงโดยการเปิดที่อยู่นี้โดยตรงบนเครื่อง ที่อยู่ (ไฟล์: /// .. ) ด้านบนเป็นค่าของ layout.upload.dir ในทำนองเดียวกันฉันเปลี่ยนโฟลเดอร์เป็นทรัพยากร/สแตติก/อัปโหลด/เพราะผ่าน ResourceLoader จะค้นหาไฟล์เป็นที่อยู่ทางกายภาพของเซิร์ฟเวอร์
ไม่มีแม้แต่โฟลเดอร์ Uplaod ภายใต้เป้าหมาย แต่ยังสามารถเข้าถึงไฟล์ได้
การอัปโหลดไฟล์
มันใช้อินเทอร์เฟซเดียวกันกับรูปภาพ ความแตกต่างคือการอัปโหลดไฟล์ขนาดใหญ่ต้องเปลี่ยนการกำหนดค่า มันถูกเขียนไว้ข้างต้นและจะไม่อธิบายรายละเอียดที่นี่
สถานะผู้ใช้ออนไลน์
ในการตรวจสอบสถานะของ Layim มีสิ่งนี้:
// การสลับสกายไลท์ของจอภาพคือ layim.on ('chatchange', ฟังก์ชั่น (res) {console.log (res.data);});ในความเป็นจริงเมื่ออ่านรายการผู้ใช้ควรโหลดออฟไลน์ อย่างไรก็ตามนี่เป็นเพียงการสาธิต เมื่อหน้าต่างสลับให้ตรวจสอบสถานะของฝั่งตรงข้าม ดังนั้นหลังจากเหตุการณ์ Chatchange ถูกทริกเกอร์เราส่งคำขอไปยังเซิร์ฟเวอร์
var t = res.data.type == 'เพื่อน'; socket.send ({mtype: t? socket.mtype.checkisonline: socket.mtype.checkonlinecount, id: res.data.id});มีสองสถานการณ์ข้างต้น เมื่อฉันแชทคนเดียวฉันต้องรู้สถานะของอีกฝ่าย ประเภทที่สองคือในระหว่างการแชทเป็นกลุ่มฉันอยากรู้ว่ามีกี่คนที่ออนไลน์ ดังนั้นฉันจึงสร้างความแตกต่างเล็กน้อย
เพิ่มสองคลาสการประมวลผลข้อความใหม่:
ในความเป็นจริงรหัสเพื่อตรวจสอบว่าออนไลน์มีดังนี้:
channelcontext checkChannelContext = aio.getChannelContextByUserId (channelcontext.getGroupContext (), body.getId ()); // ตรวจสอบว่าบูลีนออนไลน์ isOnline = checkChannelContext! = null &&! checkChannelContext.isclosed ();
จากนั้นห่อหุ้มข้อความกลับไปยังเซิร์ฟเวอร์ กระบวนการข้อความได้รับการแนะนำในการใช้งานการแชทกลุ่มเดียวดังนั้นฉันจะไม่เข้าไปดูรายละเอียดที่นี่
ต่อไปนี้เป็นวิธีในการกำหนดจำนวนคนในกลุ่ม:
setWithLock <vaunchontext> channellocks = aio.getChannelContextSbyGroup (channelcontext.getGroupContext (), body.getId ()); int onlinecount = channellocks.getobj (). size ();
ดูเอฟเฟกต์ปริมาณข้อมูลมีขนาดเล็กเล็กน้อยมีผู้ใช้เพียงสองคน แต่ก็ยังเพียงพอสำหรับการสาธิต
หลังจากเข้าสู่ระบบด้วยบัญชีอื่น:
สรุป
บทความนี้ไม่ได้มีเนื้อหามาก แต่เพียงแค่อัปโหลดไฟล์และแอปพลิเคชันง่าย ๆ ของ API แต่ละรายการใน TIO อย่างไรก็ตามสิ่งที่ทำให้ฉันตื่นเต้นคือเมื่อฉันดีบักรหัสฉันพบสิ่งที่เล่นได้มากมายเช่นสิ่งนี้:
แน่นอนผู้เขียนได้แนะนำมันในการแนะนำกรอบการทำงานและสามารถฟังข้อความที่ลูกค้าแต่ละรายส่งเป็นสถิติและสิ่งอื่น ๆ ดังนั้นขั้นตอนต่อไปคือการใช้ข้อมูลนี้เพื่อทำอะไรบางอย่าง
ในที่สุดเนื่องจากส่วนที่เหลือเป็นประวัติข้อความง่าย ๆ การเก็บรักษาข้อความแอปพลิเคชันเพื่อนและสิ่งอื่น ๆ ที่เพิ่มลบแก้ไขและตรวจสอบเราจะไม่แนะนำมันมากเกินไปในอนาคต ฉันจะโพสต์โพสต์หลังจากโครงการถูกเขียนอย่างเป็นทางการ ต่อไปฉันจะเล่นกับข้อมูลใน t-io ~~ (เดี๋ยวก่อนคุณหลงทางไปแล้วหรือยังฉันกำลังเรียนรู้ Springboot ... )
ที่อยู่รหัส: https://github.com/fanpan26/springbootlayim
สรุป
ด้านบนเป็นรหัสตัวอย่างสำหรับ Spring Boot + Layim + T-io เพื่อใช้การอัปโหลดไฟล์และตรวจสอบสถานะผู้ใช้ที่ตัวแก้ไขแนะนำให้คุณ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!