머리말
오늘날의 주요 콘텐츠는 Layim 메시지, 파일 업로드 및 도킹, 사용자 상태 모니터링 및 그룹 온라인 사용자 모니터링의 사진입니다. 아래에서 하나씩 소개하겠습니다.
이미지 업로드
Spring Boot에는 파일 업로드에 대한 많은 블로그가 있으며 일부 코드를 발췌했습니다. 업로드 부분이 간략하게 소개되어 개발 프로세스 중에 발생하는 문제를 주로 도입합니다. 먼저 Layim의 해당 인터페이스를 살펴 보겠습니다.
layim.config ({// 이미지 인터페이스를 업로드, 업로드이지 : {url : '/upload/file'} // 파일 인터페이스 업로드, uploadfile : {url : '/upload/file'} // 기타 코드}).예, 맞습니다. 두 인터페이스를 작성하여 사진을 보내고 Layim으로 파일을 보내는 기능을 구현할 수 있습니다. 여기서 약간의 문제를 저장하겠습니다. Layim이 파일 유형을 판단 했으므로 여기에서 하나의 업로드 인터페이스 만 사용합니다. 반환 된 형식은 다음과 같습니다.
{ "code": 0, "msg": "success", "data": { "src": "/upload/d8740baa-cf7e-497c-a085-5c6ed9633f35.gif", "이름": "8.gif"}}코드를 업로드하는 것은 매우 간단합니다. 파일 접미사를 가져 와서 안내 이름을 생성 한 후 해당 폴더에 저장하십시오. 마지막으로 Layim이 원하는 응답 데이터를 반환하십시오.
처음에는/resources/static/upload/폴더에 직접 전달하는 방법을 생각했습니다. 나중에, 나는 업로드가 성공한 후에 액세스 경로가 404 상황을 가질 것임을 발견했습니다. 그 이유는 폴더에 해당 파일이 있지만 대상 폴더가 없더라도 다시 컴파일 및 실행할 수 있으므로 확실히 작동하지 않습니다. 그래서 나는 해결책을 찾았습니다. 나중에 각 파일 요청을 컨트롤러의 경로에 매핑 한 다음 ResourcelOader를 사용하여 응답 파일을 찾는 방법을 처리하는 방법을 보았습니다. 코드는 다음과 같습니다.
/ *** 파일 업로드를위한 경로 구성*/ @Value ( "$ {layim.upload.dir}") 개인 문자열 filedirpath; 개인 최종 리소스 셀로더 Resourceloader; @autowired public uploadcontroller (resourceloader resourceloader) {this.resourceloader = resourceloader; }파일 코드를 가져온 다음 해당 파일에 액세스 할 때 파일 이름을 지정하며 리소스는 경로에 따라 해당 리소스를 반환합니다.
/*** 파일 경로에 액세스하고 resourceloader를 사용하여 파일*/@getMapping (value = "/{filename:.+}") @ResponseBody public responseentity <?> getFile (@PathVariable String filename) {string location = "file :"+ paths.get (filedirpath, filename). Resource Resource = ResourcelOroader.getResource (위치); return responseentity.ok (자원); } catch (예외 e) {return responseentity.notfound (). build (); }}효과를 살펴보십시오.
HTTP : 멀티 파트 : 최대 파일 크기 : 30MB Max-Request-Size : 30MB
위의 코드 값은 다음과 같이 구성됩니다. filename :.+로 구성되므로 /abc.jpg와 같은 메소드가 발생하면 getfile 메소드와 일치합니다. 그런 다음 ResourcelOader를 사용하면 파일을 찾는 데 도움이됩니다. 그러나 더 많은 것을 배우기 위해 소스 코드를 따랐습니다. 먼저 defaultresourceloader의 getResource 메소드를 살펴 보겠습니다.
@OverridePublic Resource getResource (문자열 위치) {assert.notnull (위치, 위치, "위치,"위치, "위치"; for (protocolresolver protocolresolver : this.protocolresolvers) {resource = protocolresolver.resolve (resource! = null)}}} /we (location.startSwith ( "/")) {return getResourcebypath (location);} // 이것은 classpath를 갈지 여부를 결정하기위한 것입니다 : else if (location.startswith (classpath_url_prefix)) {return new ClassPathResource (location.substring (location.substring ()), getclassloader ()) 마지막으로 파일 주소를 URL로 변환 // 위치를 URL로 구문 분석하려고 노력하십시오 ... url url = new url (location); return new urlresource (url);} catch (unlformedurlexception ex) {// url-> resource path.return return getResourcebypath (location);}}}}}}}}}}}}}}}}}}}}}}}}}}.나중에 디버깅 과정에서, 예를 들어, 접근 한 경로는 /abc.gif라는 것을 알았으며, 그 배경은이 주소로 변환 될 것임을 알았습니다. 파일 : //javaproject/springbootlayim/upload/abc.gif. 마찬가지로이 주소를 기계에서 직접 열어서 액세스 할 수도 있습니다. 위의 주소 (파일 : /// ..)는 Layout.upload.dir 의 값입니다. 마찬가지로 ResourcelOader를 통해 파일을 서버의 물리적 주소로 찾기 때문에 폴더를 resources/static/upload/로 변경했습니다.
대상 아래에 Uplaod 폴더조차 없지만 파일에 여전히 액세스 할 수 있습니다.
파일 업로드
그림과 동일한 인터페이스를 사용합니다. 차이점은 큰 파일을 업로드하려면 구성을 변경해야한다는 것입니다. 위에서 작성되었으며 여기에 자세히 설명되지 않습니다.
사용자 온라인 상태
Layim의 상태 모니터링에는 다음과 같습니다.
// 모니터의 스위칭은 skylight입니다. layim.on ( 'chatchange', function (res) {console.log (res.data);});실제로 목록을 읽을 때 사용자에게 오프라인으로로드되어야합니다. 그러나 여기에는 데모 만 있습니다. 창이 전환되면 반대쪽의 상태를 확인하십시오. 따라서 선체 이벤트가 트리거 된 후에는 서버에 요청을 보냅니다.
var t = res.data.type == '친구'; socket.send ({mtype : t? socket.mtype.checkisonline : socket.mtype.checkonlinecount, id : res.data.id});위에는 두 가지 상황이 있습니다. 혼자 채팅을 할 때 상대방의 상태를 알아야합니다. 두 번째 유형은 그룹 채팅 중에 온라인에 얼마나 많은 사람들이 있는지 알고 싶습니다. 그래서 나는 약간의 차이를 만들었습니다.
두 가지 새 메시지 처리 클래스 추가 :
실제로, 온라인인지 여부를 결정하는 코드는 다음과 같습니다.
Chann // 온라인 부울 ISONLINE = CheckChannelContext! = null &&! checkchannelContext.isclosed ();
그런 다음 메시지를 서버로 캡슐화하십시오. 메시지 프로세스는 단일 채팅 그룹 채팅의 구현에서 소개되었으므로 여기에서 자세히 설명하지 않습니다.
다음은 그룹에 얼마나 많은 사람들이 있는지 결정하는 방법입니다.
setWithLock <CHANNELCONTEXT> channellocks = aio.getChannelContexTsByGroup (Chann int onlinecount = channellocks.getobj (). size ();
효과를 살펴보면 데이터 볼륨은 약간 작고 두 명의 사용자 만이지만 여전히 데모에는 충분합니다.
다른 계정으로 로그인 한 후 :
요약
이 기사는 많은 콘텐츠가 아니며 TIO에서 파일과 개별 API의 간단한 응용 프로그램 만 업로드하는 것입니다. 그러나 저를 흥분시키는 것은 코드를 디버깅 할 때 다음과 같은 많은 재생 가능한 것들을 발견했다는 것입니다.
물론 저자는 이미 프레임 워크 소개에이를 소개했으며 각 고객이 보낸 메시지를 통계 및 기타 사항으로들을 수 있습니다. 따라서 다음 단계는이 데이터를 사용하여 무언가를하는 것입니다.
마지막으로, 나머지는 간단한 메시지 기록, 메시지 보존, 친구 응용 프로그램 및 추가, 삭제, 수정 및 확인하는 다른 것들이므로 앞으로 너무 많이 소개하지 않을 것입니다. 프로젝트가 공식적으로 작성된 후에 게시물을 게시하겠습니다. 다음으로, 나는 t-io ~~의 데이터를 가지고 놀 것이다 (잠깐만 요, 당신은 길을 잃었습니까? 원래 스프링 부츠를 배우고있었습니다 ...)
코드 주소 : https://github.com/fanpan26/springbootlayim
요약
위는 Spring Boot + Layim + T-IO의 예제 코드로, 편집자가 소개 한 파일 업로드 및 사용자 상태를 모니터링합니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!