Prefácio
O conteúdo principal de hoje é: imagens em mensagens Layim, upload de arquivos e encaixe, monitoramento de status do usuário e monitoramento de usuários on -line em grupo. Vou apresentá -lo um a um abaixo.
Upload de imagem
Existem muitos blogs sobre uploads de arquivos na Spring Boot, e eu também tremei parte do código. A parte do upload é introduzida brevemente, introduzindo principalmente os problemas encontrados durante o processo de desenvolvimento. Primeiro, vamos dar uma olhada na interface correspondente de Layim:
Layim.config ({// Carregar a interface da imagem, uploadImage: {url: '/upload/file'} // upload de arquivos interface, uploadfile: {url: '/upload/file'} // outro código})Sim, isso mesmo, podemos implementar a função de enviar fotos e enviar arquivos em Layim escrevendo duas interfaces. Vou economizar alguns problemas aqui. Como Layim julgou o tipo de arquivo, eu uso apenas uma interface de upload aqui. O formato retornado é:
{"Code": 0, "Msg": "Sucesso", "Data": {"SRC": "/Upload/d8740baa-cf7e-497c-a085-5c6ed9633f35.gif", "nome": "8.gif"}}}}}}}}}}}O upload do código é muito simples. Obtenha o sufixo do arquivo, gerar o nome do GUID e salve -o na pasta correspondente. Finalmente, retorne os dados de resposta que Layim deseja.
No começo, pensei em passá -lo diretamente para o/Recursos/Static/Upload/Pasta. Mais tarde, descobri que o caminho de acesso terá uma situação 404 depois que o upload for bem -sucedido. A razão é: mesmo se houver esse arquivo na pasta, mas não há pasta de destino , por isso só pode ser recompilado e executado, então isso definitivamente não funcionará. Então, procurei uma solução. Mais tarde, vi uma maneira de lidar com isso, que é mapear cada solicitação de arquivo para um caminho no controlador e, em seguida, usar o ResourceLoader para encontrar o arquivo de resposta. O código é o seguinte:
/ *** Configuração do caminho para fazer upload do arquivo**/ @Value ("$ {Layim.upload.dir}") private String filedirPath; PRIVENT FINAL ResourceLoader ResourceLoader; @AUTOWIRED Public uploadController (ResourceLoader ResourceLoader) {this.ResourceLoader = ResourceLoader; }Obtenha o código do arquivo e, ao acessar esse arquivo, especifique o nome do arquivo e o recurso retornará o recurso correspondente de acordo com o caminho.
/*** Acesse o caminho do arquivo e use o ResourceLoader para obter o arquivo**/@getMapping (value = "/{Filename:.+}") @ResponseBody Public ResponseEntity <?> GetFile (@PathVariable string filename) {try {string Location = "File:"+ Paths.get (filEdirPath, filename). Recurso de recurso = ResourceLoader.GetResource (Localização); RETORNO DE REPORTIÇÃO DE RETORNO (RESCURSO); } catch (Exceção e) {return ResponseIntity.NotFound (). Build (); }}Dê uma olhada no efeito: (Para encontrar o problema de fazer upload de limitação do tamanho do arquivo ao fazer capturas de tela de demonstração para todos, basta alterar a configuração.)
HTTP: Multipart: Max-File-Size: 30MB Max-Request-Size: 30MB
O valor do código acima é configurado como: nome do arquivo:.+, Para que, se encontrarmos um método como /abc.jpg, corresponderemos ao método getFile. Em seguida, o ResourceLoader nos ajuda a encontrar o arquivo. Mas, para saber mais, segui o código -fonte. Vamos primeiro olhar para o método GetResource no AmaultResourceLoader.
@OverridePublic Resource GetResource (String Location) {Assert.NotNull (Localização, "Localização não deve ser nulo"); para (ProtocolResolver ProtocolResolver: this.protocolResolvers) {Resource Resource = protocressolver.resolve (localização; Arquivo: if (location.startswith ("/")) {return getResourcebypath (location);} // é para determinar se deve ir classpath: else if (location.startswith (classPath_url_Prefix)) {return ClassThResource (local.substring (ClassPath_url_Prefix)) {// Finalmente converte o endereço do arquivo em url // Tente analisar o local como um url ... url url = new url (localização); retorna um novo urlResource (url);} catch (malformUlexception ex) {// no url -> resolver como recurso.Posteriormente, durante meu processo de depuração, descobri que, por exemplo, o caminho que acessei era /abc.gif, então seu plano de fundo seria convertido para este endereço: arquivo: /// g: /javaproject/springbootlayim/upload/abc.gif. Da mesma forma, também é possível acessar, abrindo este endereço diretamente na máquina. O endereço (arquivo: /// ..) acima é o valor de layout.upload.dir . Da mesma forma, alterei a pasta para recursos/static/upload/, porque, através do ResourceLoader, ele localiza o arquivo no endereço físico do servidor.
Não existe sequer uma pasta uplaod em Target, mas os arquivos ainda podem ser acessados
Upload de arquivo
Ele usa a mesma interface que a imagem. A diferença é que o upload de arquivos grandes exige alterar a configuração. Foi escrito acima e não será descrito em detalhes aqui.
Status online do usuário
No monitoramento de status de Layim, existe o seguinte:
// comutação da clarabóia do monitor é Layim.on ('Chatchange', function (res) {console.log (res.data);});De fato, ao ler a lista, o usuário deve ser carregado offline. No entanto, aqui está apenas uma demonstração. Quando a janela mudar, verifique o status do lado oposto. Portanto, depois que o evento Chatchange é acionado, enviamos uma solicitação para o servidor.
var t = res.data.type == 'amigo'; Socket.send ({mtype: t? socket.mtype.checkisonline: soket.mtype.checkonlinecount, id: res.data.id});Existem duas situações acima. Quando converso sozinho, preciso conhecer o status da outra parte. O segundo tipo é que, durante o bate -papo em grupo, quero saber quantas pessoas estão online. Então eu fiz uma pequena diferença.
Adicione duas novas classes de processamento de mensagens:
De fato, o código para determinar se está online é o seguinte:
ChannelContext checkchannelContext = aio.getChannelContextByUserId (ChannelContext.getGroupContext (), body.getId ()); // Verifique se online boolean isonline = checkChannelContext! = Null &&! CheckChannelContext.iscosed ();
Em seguida, encapsula a mensagem de volta ao servidor. O processo de mensagem foi introduzido na implementação do bate -papo em grupo de bate -papo, para que não entre em detalhes aqui.
A seguir, são apresentadas as maneiras de determinar quantas pessoas estão no grupo:
SetWithlock <NanalContext> canalLellocks = aio.getChannelContextsByGroup (ChannelContext.getGroupContext (), Body.getId ()); int onlineCount = canalLellocks.getObj (). size ();
Veja o efeito, o volume de dados é um pouco pequeno, apenas dois usuários, mas ainda é suficiente para uma demonstração.
Depois de fazer login com outra conta:
Resumir
Este artigo não é muito conteúdo, está apenas enviando um arquivo e aplicativos simples de APIs individuais no TIO. No entanto, o que me excita é que, quando depurar o código, encontrei muitas coisas jogáveis, como essa coisa:
Obviamente, o autor já o introduziu na introdução da estrutura e pode ouvir a mensagem enviada por cada cliente como estatística e outras coisas. Portanto, o próximo passo é usar esses dados para fazer algo.
Finalmente, como o resto é um simples histórico de mensagens, preservação de mensagens, aplicação de amigos e outras coisas que adicionam, excluem, modificam e verificam, não o apresentaremos demais no futuro. Vou postar um post depois que o projeto estiver oficialmente escrito. Em seguida, vou brincar com os dados em T-Io ~~ (espere, você se desviou? Eu estava aprendendo originalmente Springboot ...)
Endereço de código: https://github.com/fanpan26/springbootlayim
Resumir
O exposto acima é o código de exemplo para a inicialização da primavera + Layim + T-IO para implementar o upload de arquivos e monitorar o status do usuário que o editor apresentou a você. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!