一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring boot + LayIM + t-io 實現文件上傳、 監聽用戶狀態的實例代碼

Spring boot + LayIM + t-io 實現文件上傳、 監聽用戶狀態的實例代碼

2021-03-03 11:01丶Pz Java教程

這篇文章主要介紹了Spring boot + LayIM + t-io 實現文件上傳、 監聽用戶狀態的實例代碼,需要的朋友可以參考下

前言

        今天的主要內容是:layim消息中圖片,文件的上傳對接、用戶狀態的監聽、群在線人數的監聽。下面我將挨個介紹。

圖片上傳

    關于spring boot中的文件上傳的博客很多,我也是摘抄了部分代碼。上傳部分簡單介紹,主要介紹在開發過程中遇到的問題。首先我們看一下layim的相應的接口:

?
1
2
3
4
5
6
7
layim.config({
//上傳圖片接口
,uploadimage: {url: '/upload/file'}
//上傳文件接口
,uploadfile: {url: '/upload/file'}
//其他代碼
})

    是的,沒錯我們只要寫兩個接口就能實現layim中發圖片,發文件的功能了,我這里省點事,由于layim已經判斷了文件類型,所以我這里只用了一個上傳接口。返回的格式是醬紫的:

?
1
{"code":0,"msg":"success","data":{"src":"/upload/d8740baa-cf7e-497c-a085-5c6ed9633f35.gif","name":"8.gif"}}

   上傳代碼就很簡單了,獲取文件后綴,生成guid的名稱,保存到相應文件夾下。最后返回layim想要的響應數據。

    剛開始想的是直接傳到 /resources/static/upload/文件夾下,后來發現上傳成功之后訪問路徑會出現404的情況,原因就是:即使文件夾下有那個文件,但是target相應的文件夾下沒有,所以重新編譯運行之后才可以,那這樣肯定不行。于是我就找解決方案,后來看到這么一種處理方式,就是把每個文件請求也映射到controller中的一個路徑上,然后使用 resourceloader 去找響應的文件。代碼如下:

?
1
2
3
4
5
6
7
8
9
10
/**
* 上傳文件的路徑配置
* */
@value("${layim.upload.dir}")
private string filedirpath;
private final resourceloader resourceloader;
@autowired
public uploadcontroller(resourceloader resourceloader){
this.resourceloader = resourceloader;
}

   獲取文件代碼,那么在訪問那個文件的時候,指定文件名,resource就會根據路徑返回相應的資源。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
 * 訪問文件路徑,使用resourceloader獲取文件
 * */
 @getmapping(value = "/{filename:.+}")
 @responsebody
 public responseentity<?> getfile(@pathvariable string filename) {
 try {
  string location = "file:"+ paths.get(filedirpath, filename).tostring();
  resource resource = resourceloader.getresource(location);
  return responseentity.ok(resource);
 } catch (exception e) {
  return responseentity.notfound().build();
 }
 }

    看一下效果:(為了給大家做演示截圖的時候遇到上傳文件大小限制的問題,配置改一下就可以了。)

Spring boot + LayIM + t-io 實現文件上傳、 監聽用戶狀態的實例代碼

?
1
2
3
4
http:
 multipart:
  max-file-size: 30mb
  max-request-size: 30mb

    上文中的代碼 value 配置為:filename:.+,這樣我們訪問路徑如果遇到 比如 /abc.jpg 那么就會匹配上 getfile這個方法。然后由resourceloader幫我們找文件。不過為了多了解一點,我跟蹤了一下源代碼。先看一下defaultresourceloader中的getresource方法。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@override
    public resource getresource(string location) {
        assert.notnull(location, "location must not be null");
 
        for (protocolresolver protocolresolver : this.protocolresolvers) {
            resource resource = protocolresolver.resolve(location, this);
            if (resource != null) {
                return resource;
            }
        }
 //我們是使用file:開頭的
        if (location.startswith("/")) {
            return getresourcebypath(location);
        }
 //這里判斷是不是走 classpath:
        else if (location.startswith(classpath_url_prefix)) {
            return new classpathresource(location.substring(classpath_url_prefix.length()), getclassloader());
        }
        else {
            try {
  //最后將文件地址轉化成了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);
            }
        }
    }

    后來在我調試的過程中發現,比如我訪問的路徑是 /abc.gif,那么他后臺就會轉換成這個地址:file:///g:/javaproject/springbootlayim/upload/abc.gif ,所以同理,在本機上直接將這個地址打開也是能夠訪問的。上文中的地址(file:///..)就是 layim.upload.dir 的值。同樣,我把文件夾改為resources/static/upload/下同樣適用,因為,通過resourceloader,他將文件定位到了服務器的物理地址。

Spring boot + LayIM + t-io 實現文件上傳、 監聽用戶狀態的實例代碼

   target下甚至連uplaod文件夾都沒有,但是文件還是能夠訪問到

Spring boot + LayIM + t-io 實現文件上傳、 監聽用戶狀態的實例代碼

文件上傳

    和圖片用的是同一個接口,差別在于上傳大文件需要改一下配置,上文中已經寫到,這里不在詳述。

用戶在線狀態

    在layim的狀態監聽中,有這么一項:

?
1
2
3
4
//監聽天窗口的切換
layim.on('chatchange', function(res){
 console.log(res.data); 
});

    其實在讀取列表的時候就應該要加載用戶在線離線狀態。不過這里只演示,當窗口切換時候,查一下對面的狀態。所以,在觸發chatchange事件后,我們向服務器發送一條請求。

?
1
2
3
4
5
var t = res.data.type=='friend';
socket.send({
mtype:t? socket.mtype.checkisonline:socket.mtype.checkonlinecount,
id:res.data.id
});

    上面有兩個情況,第一種單聊的時候,我需要知道對方的狀態。第二種,群聊的時候我想知道有多少人在線。所以稍微做了下區分。

    新加兩個消息處理類:

Spring boot + LayIM + t-io 實現文件上傳、 監聽用戶狀態的實例代碼

    其實判斷是否在線的代碼如下:

?
1
2
3
4
channelcontext checkchannelcontext =
 aio.getchannelcontextbyuserid(channelcontext.getgroupcontext(),body.getid());
//檢查是否在線
boolean isonline = checkchannelcontext != null && !checkchannelcontext.isclosed();

    然后封裝消息返回給服務器。消息流程在 單聊群聊的實現 中已經介紹過,這里不在贅述。

    判斷群里有多少人的方法如下:

?
1
2
3
setwithlock<channelcontext> channellocks =
 aio.getchannelcontextsbygroup(channelcontext.getgroupcontext(),body.getid());
int onlinecount = channellocks.getobj().size();

    看一下效果,數據量有點小,就兩個用戶,不過作為演示還是夠用噠。

    Spring boot + LayIM + t-io 實現文件上傳、 監聽用戶狀態的實例代碼

    Spring boot + LayIM + t-io 實現文件上傳、 監聽用戶狀態的實例代碼

    另外的賬號登錄后:

    Spring boot + LayIM + t-io 實現文件上傳、 監聽用戶狀態的實例代碼

    Spring boot + LayIM + t-io 實現文件上傳、 監聽用戶狀態的實例代碼

總結

    本篇內容不是很多,就是一個文件的上傳和tio中的個別api的簡單應用,不過令我興奮的是在我調試代碼的時候,發現了很多可玩的東西,比如這玩意:

Spring boot + LayIM + t-io 實現文件上傳、 監聽用戶狀態的實例代碼

    當然,作者已經在框架介紹中介紹過了,可以監聽每個客戶端的發送消息情況,作為統計之類的。所以,下一步可以拿這些數據搞一些事情。

    最后,由于剩下的內容就是一些簡單的消息歷史記錄,消息的保存,好友申請等增刪改查的東西,后續不在過多介紹。項目正式寫完之后在發一篇。接下來的準備玩玩t-io里面的數據~~(等等,是不是跑偏了,本來是學習springboot的。。。)

    代碼地址: https://github.com/fanpan26/springbootlayim

總結

以上所述是小編給大家介紹的spring boot + layim + t-io 實現文件上傳、 監聽用戶狀態的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:https://my.oschina.net/panzi1/blog/1582389

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 美妇在线 | 四大美女思春艳史片 | 国产精品欧美韩国日本久久 | 免费看黄色片的网站 | 热99精品视频 | 好大好热 | 国产精品久久久久毛片 | 男女车车好快的车车免费网站 | 99精品热线在线观看免费视频 | 波多野结衣一区 | 久草草在线视视频 | 消息称老熟妇乱视频一区二区 | 国产九九视频在线观看 | 亚洲欧美日韩特级毛片 | 操mm| 色佬头| 精品久久日日躁夜夜躁AV | 91精品国产综合久久福利 | 天天做天天爱天天爽综合网 | 波多野结衣黑人系列在线观看 | 成人欧美一区二区三区黑人 | 欧美一二区视频 | 女人日男人 | daring国家队在线观看樱花动漫 | 91短视频版高清在线观看免费 | 午夜福利体检 | 热99re久久精品国产首页 | 丁香五香天堂 | 亚偷熟乱区视频在线观看 | 国产一区二区三区免费在线视频 | 国产亚洲精品精品国产亚洲综合 | 亚洲精品第一国产综合 | 息与子中文字幕完整在线 | 人与动人物性行为zozo共患病 | 国外欧美一区另类中文字幕 | 男同桌扒开女同桌胸罩喝奶 | 日本高清在线看免费观看 | 国产亚洲欧美日韩俺去了 | 视频在线观看国产 | 青青青国产手机在线播放 | 色女的乖男人 |