(flutter版本、kotlin版本)高仿微信服务端代码-群聊

package com.wn.web;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.google.gson.Gson;
import com.wn.dao.GroupChatDao;
import com.wn.model.BaseResult;
import com.wn.model.ChatBean;
import com.wn.model.GroupChatBean;
import com.wn.util.BaseUtils;
import com.wn.util.CommonUtils;
import com.wn.util.DbUtils;
import com.wn.util.PrintWriterUtils;
import com.wn.util.VideoUtils;

/**
* Author : wangning
* Date :  2022年11月13日 下午10:37:54
* Email : maoning20080809@163.com
* Description : 群聊
*/
@WebServlet("/groupchat")
public class GroupChatServlet extends BaseServlet {
    
    private GroupChatDao groupChatDao = new GroupChatDao();

    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doPost(request, response);
    }

    
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String method = request.getParameter("method");
        System.out.println("GroupChatServlet 方法名:" + method);
        if("insertGroupChat".equals(method)) {
            processInsertGroupChat(request, response);
        } else if("getGroupChat".equals(method)) {
            processGetGroupChat(request, response);
        } else if("uploadGroupChatImages".equals(method)) {
            processUploadImages(request, response);
        } else if("uploadGroupChatVoice".equals(method)) {
            processUploadGroupChatVoice(request, response);
        } else if("uploadGroupChatVideo".equals(method)) {
            processUploadGroupChatVideo(request, response);
        } else if("testInsertGroupChat".equals(method)) {
            testInsertGroupChat(request, response);
        } else if("testGetGroupChat".equals(method)) {
            testGetGroupChat(request, response);
        }
        super.doPost(request, response);
    }
    
    //插入群聊信息
    private void processInsertGroupChat(HttpServletRequest request, HttpServletResponse response) throws IOException  {
        Connection con = null;
        BaseResult<String> baseResult = new BaseResult<String>();
        try {
            con = DbUtils.getInstance().getConnection();
            String groupChatStr = request.getParameter("groupChat");
            //String groupChatStr = (String)request.getAttribute("groupChat");
            GroupChatBean groupChatBean = new Gson().fromJson(groupChatStr, GroupChatBean.class);
            boolean isSuccess = groupChatDao.insertGroupChat(con, groupChatBean);
            System.out.println("插入群聊返回值:" + isSuccess);
            baseResult.setSuccess(true);
            
        } catch (Exception e) {
            e.printStackTrace();
            baseResult.setSuccess(false);
            
        } finally {
            PrintWriterUtils.basePrintWriterObject(response, baseResult);
            DbUtils.getInstance().close(con);
        }
    }
    
    //获取群聊信息
    private void processGetGroupChat(HttpServletRequest request, HttpServletResponse response) throws IOException  {
        BaseResult<String> baseResult = new BaseResult<String>();
        Connection con = null;
        try {
            con = DbUtils.getInstance().getConnection();
            String messageId = request.getParameter("messageId");
            //String messageId = (String)request.getAttribute("messageId");
            System.out.println("processGetGroupChat 参数:" + messageId);
            GroupChatBean groupChatBean = groupChatDao.getGroupChatByMessageId(con,messageId);
            
            if(groupChatBean == null) {
                baseResult.setSuccess(false);
            } else {
                String groupChatBeanGson = new Gson().toJson(groupChatBean);
                System.out.println("processGetGroupChat 返回值:" + groupChatBeanGson);
                baseResult.setSuccess(true);
                baseResult.setData(groupChatBeanGson);
            }
            
        } catch (Exception e) {
            e.printStackTrace();
            baseResult.setSuccess(false);
            
        } finally {
            PrintWriterUtils.basePrintWriterObject(response, baseResult);
            DbUtils.getInstance().close(con);
        }
    }
    
    //上传群聊图片
    private void processUploadImages(HttpServletRequest request, HttpServletResponse response) throws IOException {
        
        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        
        factory.setSizeThreshold(1024 * 1024);
        List items = null;
        String filename = "";
        ArrayList<String> paramList = new ArrayList<String>();
        BaseResult<String> baseResult = new BaseResult<String>();
        Connection con = null;

        try {
            con = DbUtils.getInstance().getConnection();
            items = upload.parseRequest(request);
            Iterator iter = items.iterator();
            while(iter.hasNext()) {
                FileItem item = (FileItem)iter.next();
                                
                if(!item.isFormField()) {
                    filename = System.currentTimeMillis() + ".jpg";
                    String resultPath = BaseUtils.getUploadPath(request);
                    File f = new File(resultPath);
                    if(!f.exists()) {
                        f.mkdirs();
                    }
                    String imgsrc = resultPath + filename;
                    InputStream is = item.getInputStream();
                    FileOutputStream fos = new FileOutputStream(imgsrc);
                    byte b[] = new byte[1024 * 1024];
                    int length = 0;
                    while(-1 != (length = is.read(b))) {
                        fos.write(b, 0, length);
                    }
                    fos.flush();
                    fos.close();
                    System.out.println("上传群聊图片路径:" + filename);
                } else {
                    //获取其他参数
                    String value = item.getString("UTF-8");
                    paramList.add(value);
                }
            }
            
            GroupChatBean groupChatBean = getGroupChatBean(paramList, filename, "");

            boolean isSuccess = true;
            groupChatDao.insertGroupChat(con,groupChatBean);
        
            if(isSuccess) {
                String groupChatBeanGson =  new Gson().toJson(groupChatBean);                
                baseResult.setSuccess(true);
                baseResult.setData(groupChatBeanGson);
                    
            } else {
                baseResult.setSuccess(false);
                
            }
            
        } catch(Exception e) {
            e.printStackTrace();
            baseResult.setSuccess(false);
            
        } finally {
            DbUtils.getInstance().close(con);
            PrintWriterUtils.basePrintWriterObject(response, baseResult);
        }
    }
    
    //上传群聊小视频
    private void processUploadGroupChatVideo(HttpServletRequest request, HttpServletResponse response) throws IOException {
        
        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        
        factory.setSizeThreshold(1024 * 1024);
        List items = null;
        //小视频文件
        String filename = "";
        ArrayList<String> paramList = new ArrayList<String>();
        //小视频缩略图
        String videoFrame = "";
        BaseResult<String> baseResult = new BaseResult<String>();
        Connection con = null;

        try {
            con = DbUtils.getInstance().getConnection();

            String videoFrameFileName = "";
            items = upload.parseRequest(request);
            Iterator iter = items.iterator();
            while(iter.hasNext()) {
                FileItem item = (FileItem)iter.next();
                                
                if(!item.isFormField()) {
                    filename = System.currentTimeMillis() + ".mp4";
                    String resultPath = BaseUtils.getUploadPath(request);
                    File f = new File(resultPath);
                    if(!f.exists()) {
                        f.mkdirs();
                    }
                    String videosrc = resultPath + filename;
                    InputStream is = item.getInputStream();
                    FileOutputStream fos = new FileOutputStream(videosrc);
                    byte b[] = new byte[1024 * 1024];
                    int length = 0;
                    while(-1 != (length = is.read(b))) {
                        fos.write(b, 0, length);
                    }
                    fos.flush();
                    fos.close();
                    
                    //生成群聊小视频对应的缩略图
                    videoFrameFileName = System.currentTimeMillis() + ".jpg";
                    videoFrame = resultPath + videoFrameFileName;
                    File videoFrameFile = new File(videoFrame);
                    if(!videoFrameFile.exists()) {
                        videoFrameFile.createNewFile();
                    }
                    
                    VideoUtils.fetchImage(videosrc, videoFrame);
                    
                    System.out.println("上传群聊小视频路径:" + filename +" , 缩略图路径: " + videoFrameFileName);
                } else {
                    //获取其他参数
                    String value = item.getString("UTF-8");
                    paramList.add(value);
                }
            }
            
            GroupChatBean groupChatBean = getGroupChatBean(paramList, filename, videoFrameFileName);
            boolean isSuccess =  groupChatDao.insertGroupChat(con,groupChatBean);    
            
            if(isSuccess) {
                String chatBeanGson =  new Gson().toJson(groupChatBean);                
                baseResult.setSuccess(true);
                baseResult.setData(chatBeanGson);    
            } else {
                baseResult.setSuccess(false);
            }
            
        } catch(Exception e) {
            e.printStackTrace();
            baseResult.setSuccess(false);
        } finally {
            PrintWriterUtils.basePrintWriterObject(response, baseResult);
            DbUtils.getInstance().close(con);
        }
    }    
    
    //上传群聊语音
    private void processUploadGroupChatVoice(HttpServletRequest request, HttpServletResponse response) throws IOException {
        System.out.println("上传群聊语音");
        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        
        factory.setSizeThreshold(1024 * 1024);
        List items = null;
        //语音文件
        String filename = "";
        ArrayList<String> paramList = new ArrayList<String>();
        BaseResult<String> baseResult = new BaseResult<String>();
        Connection con = null;

        try {
            con = DbUtils.getInstance().getConnection();

            items = upload.parseRequest(request);
            Iterator iter = items.iterator();
            while(iter.hasNext()) {
                FileItem item = (FileItem)iter.next();
                                
                if(!item.isFormField()) {
                    filename = System.currentTimeMillis() + ".mp3";
                    String resultPath = BaseUtils.getUploadPath(request);
                    File f = new File(resultPath);
                    if(!f.exists()) {
                        f.mkdirs();
                    }
                    String videosrc = resultPath + filename;
                    InputStream is = item.getInputStream();
                    FileOutputStream fos = new FileOutputStream(videosrc);
                    byte b[] = new byte[1024 * 1024];
                    int length = 0;
                    while(-1 != (length = is.read(b))) {
                        fos.write(b, 0, length);
                    }
                    fos.flush();
                    fos.close();
                    
                    System.out.println("上传群聊语音频路径:" + filename);
                } else {
                    //获取其他参数
                    String value = item.getString("UTF-8");
                    paramList.add(value);
                }
            }
            
            GroupChatBean groupChatBean = getGroupChatBean(paramList, filename, "");
            System.out.println("上传的群聊语音:" + new Gson().toJson(groupChatBean));
            boolean isSuccess = groupChatDao.insertGroupChat(con,groupChatBean);
            System.out.println("上传的群聊语音返回:" + isSuccess);
            
            if(isSuccess) {
                String groupChatGson =  new Gson().toJson(groupChatBean);                
                baseResult.setSuccess(true);
                baseResult.setData(groupChatGson);
            } else {
                baseResult.setSuccess(false);
            }
            
            
        } catch(Exception e) {
            e.printStackTrace();
            baseResult.setSuccess(false);
        } finally {
            PrintWriterUtils.basePrintWriterObject(response, baseResult);
            DbUtils.getInstance().close(con);
        }
    }    
    
    /**
     * 获取群聊对象
     * @param paramList
     * @param filePath 文件路径
     * @param videoFrame 小视频缩略图
     * @return
     */
    private GroupChatBean getGroupChatBean(ArrayList<String> paramList, String filePath,String videoFrame){
        GroupChatBean groupChatBean = new GroupChatBean();
        String account = paramList.get(0);
        String groupId = paramList.get(1);
        int contentType = Integer.parseInt(paramList.get(2));
        String messageId = paramList.get(3);
        String addTime = paramList.get(4);
                
        groupChatBean.setAccount(account);
        groupChatBean.setGroupId(groupId);
        groupChatBean.setContent("");
        groupChatBean.setContentType(contentType);
        groupChatBean.setMessageId(messageId);
        groupChatBean.setAddTime(addTime);
        groupChatBean.setMediaUrl(filePath);
    
        if(contentType == CommonUtils.Chat.CONTENT_TYPE_VIDEO
                || contentType == CommonUtils.Chat.CONTENT_TYPE_VOICE) {
            //设置时间
            groupChatBean.setSecond(Integer.parseInt(paramList.get(5)));
        }
        
        return groupChatBean;
            
    }
    
    
    //测试插入群聊信息
    private void testInsertGroupChat(HttpServletRequest request, HttpServletResponse response) throws IOException  {
        System.out.println("测试插入群聊信息 testInsertGroupChat");
        GroupChatBean groupChatBean = new GroupChatBean();
        groupChatBean.setId(1);
        groupChatBean.setAccount("test1");
        groupChatBean.setAddTime("20080808080808");
        groupChatBean.setContent("test 666666888888");
        groupChatBean.setContentType(1);
        groupChatBean.setMediaUrl("http://www.baidu.com/");
        Random random = new Random();
        groupChatBean.setGroupId("g" + random.nextInt(10000));
        groupChatBean.setMessageId("msg" + random.nextInt(1000000));
        String groupChatBeanString = new Gson().toJson(groupChatBean);
        request.setAttribute("groupChat", groupChatBeanString);
        processInsertGroupChat(request, response);
        
    }    
    
    //测试获取群聊信息
    private void testGetGroupChat(HttpServletRequest request, HttpServletResponse response) throws IOException  {
        System.out.println("测试插入群聊信息 testGetGroupChat");
        request.setAttribute("messageId", "msg356716");
        processGetGroupChat(request, response);
        
    }    
    
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要实现类似微信发送定位的功能,你需要使用百度地图提供的 SDK。在 Flutter 中,你可以使用 `flutter_baidu_mapapi_sdk` 插件来使用百度地图 SDK。 下面是实现类似微信发送定位的步骤: 1. 引入插件 在 `pubspec.yaml` 文件中添加 `flutter_baidu_mapapi_sdk` 插件依赖: ```yaml dependencies: flutter_baidu_mapapi_sdk: ^latest_version ``` 2. 初始化地图 在需要使用地图的页面中初始化地图,可以使用 `BaiduMapController` 控制地图: ```dart import 'package:flutter_baidu_mapapi_sdk/flutter_baidu_mapapi_sdk.dart'; class MapPage extends StatefulWidget { @override _MapPageState createState() => _MapPageState(); } class _MapPageState extends State<MapPage> { BaiduMapController _controller; @override Widget build(BuildContext context) { return Scaffold( body: Stack( children: [ BaiduMap( onMapCreated: (controller) { _controller = controller; }, initialCameraPosition: CameraPosition( target: LatLng(39.915, 116.404), zoom: 11, ), ), ], ), ); } } ``` 3. 添加定位按钮 在页面中添加一个定位按钮,当用户点击按钮时,获取当前位置信息并显示在地图上: ```dart import 'package:location/location.dart'; class _MapPageState extends State<MapPage> { ... final _location = Location(); void _getCurrentLocation() async { final locationData = await _location.getLocation(); final latLng = LatLng(locationData.latitude, locationData.longitude); _controller.animateCamera(CameraUpdate.newLatLng(latLng)); _controller.addMarker(MarkerOptions( position: latLng, icon: BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueRed), )); } @override Widget build(BuildContext context) { return Scaffold( body: Stack( children: [ BaiduMap( onMapCreated: (controller) { _controller = controller; }, initialCameraPosition: CameraPosition( target: LatLng(39.915, 116.404), zoom: 11, ), ), Positioned( bottom: 16, right: 16, child: FloatingActionButton( onPressed: _getCurrentLocation, child: Icon(Icons.location_on), ), ), ], ), ); } } ``` 4. 获取地址信息 通过百度地图提供的 `ReverseGeoCodeSearch` 类,可以根据经纬度获取地址信息: ```dart import 'package:flutter_baidu_mapapi_sdk/flutter_baidu_mapapi_sdk.dart'; class _MapPageState extends State<MapPage> { ... final _location = Location(); final _search = ReverseGeoCodeSearch(); void _getCurrentLocation() async { final locationData = await _location.getLocation(); final latLng = LatLng(locationData.latitude, locationData.longitude); _controller.animateCamera(CameraUpdate.newLatLng(latLng)); _controller.addMarker(MarkerOptions( position: latLng, icon: BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueRed), )); _search.reverseGeoCode( ReverseGeoCodeOption( location: latLng, ), onGetReverseGeoCodeResult: (result) { final address = result.address; print(address); }, ); } ... } ``` 5. 发送位置信息 最后,你可以通过你的应用程序向服务器发送位置信息,实现类似微信发送位置的功能。 以上就是实现类似微信发送定位的步骤,你可以根据你的具体需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

六毛六66

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值