zhanghua
2025-02-06 55793861746f0a8dd74b84d444a60c43f982b255
ycl-platform/src/main/java/com/ycl/controller/platformApi/AlarmController.java
@@ -2,6 +2,14 @@
import cn.hutool.json.JSONConverter;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyuncs.exceptions.ClientException;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.ycl.annotation.LogSave;
@@ -13,6 +21,7 @@
import com.ycl.service.video.IVideoAlarmReportService;
import com.ycl.service.video.impl.IVideoPointService;
import com.ycl.util.VideoUtil;
import com.ycl.utils.ConstantPropertiesUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.SneakyThrows;
@@ -23,15 +32,13 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.bind.DatatypeConverter;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Base64;
import java.util.Dictionary;
import java.util.Hashtable;
import java.util.List;
import java.util.*;
/**
 * @author admin
@@ -71,7 +78,7 @@
    @PostMapping("/HK/alarmReport")
    @LogSave(operationType = "报警管理", contain = "海康视频报警推送")
    public CommonResult hkAlarmReport(@RequestBody @Validated HKAlarmParam alarmParam) {
//        System.out.println("保存报警数据:" + JSONObject.toJSONString(alarmParam));
//        System.out.println("海康视频报警推送API:" + JSONObject.toJSONString(alarmParam));
        videoAlarmReportService.saveFromHK(alarmParam);
        return new CommonResult(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage());
    }
@@ -120,10 +127,71 @@
    public byte[] getImages(HttpServletRequest request, HttpServletResponse response,
                            @RequestParam String fileUrl, @RequestParam(required = false) String OSSAccessKeyId,
                            @RequestParam(required = false) String Signature) {
        if (StringUtils.isNotBlank(fileUrl)) {
            String sessionId = request.getSession().getId();
            sessionDic.put(sessionId, 0);
            return getBytes(fileUrl, OSSAccessKeyId, Signature, sessionId);
        } else {
            return null;
        }
    }
    @ApiOperation(value = "获取图片")
    @GetMapping(value = "/img/base64")
//    @GetMapping(value = "/img")
    @ResponseBody
    public String getImagesBase64(HttpServletRequest request, HttpServletResponse response,
                                  @RequestParam String fileUrl, @RequestParam(required = false) String OSSAccessKeyId,
                                  @RequestParam(required = false) String Signature) {
        String sessionId = request.getSession().getId();
        sessionDic.put(sessionId, 0);
        return getBytes(fileUrl, OSSAccessKeyId, Signature, sessionId);
        byte[] bytes = getBytes(fileUrl, OSSAccessKeyId, Signature, sessionId);
        String base64 = DatatypeConverter.printBase64Binary(bytes);
        return base64;
    }
    @GetMapping(value = "/index")
    @ResponseBody
    public String getImages(HttpServletRequest request, HttpServletResponse response) {
        return "遂昌综合执法平台";
    }
    private URL translateOSSUrl(String fileUrl) {
        OSS ossClient = null;
        try {
            String endpoint = ConstantPropertiesUtils.END_POINT;
            String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
            String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
            String bucketName = ConstantPropertiesUtils.BUCKET_NAME;
            String[] urlArray = fileUrl.split("Expires=");
            String[] urlArray2 = urlArray[0].split("aliyuncs.com/");
            String objectName = urlArray2[1].replace("?", "");
            ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            // 设置签名URL过期时间,单位为毫秒。本示例以设置过期时间为1小时为例。
            Date expiration = new Date(new Date().getTime() + 3600 * 1000L);
            // 生成以GET方法访问的签名URL。本示例没有额外请求头,其他人可以直接通过浏览器访问相关内容。
            URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);
            return url;
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        return null;
    }
    private byte[] getBytes(String fileUrl, String OSSAccessKeyId, String Signature, String sessionId) {
@@ -131,9 +199,16 @@
        try {
            if (sessionDic.get(sessionId) < 10) {
                sessionDic.remove(sessionId);
                fileUrl = fileUrl.replace("Expires", "v");
                System.out.println("getImages获取图片地址:" + fileUrl + "&OSSAccessKeyId=" + OSSAccessKeyId + "&Signature=" + Signature);
                URL url = new URL(fileUrl + "&OSSAccessKeyId=" + OSSAccessKeyId + "&Signature=" + Signature);
                URL url = translateOSSUrl(fileUrl);
//                fileUrl = fileUrl.replace("Expires", "v");
////                System.out.println("getImages获取图片地址:" + fileUrl + "&OSSAccessKeyId=" + OSSAccessKeyId + "&Signature=" + Signature);
//                URL url = null;
//                if (StringUtils.isNotBlank(OSSAccessKeyId) && StringUtils.isNotBlank(Signature)) {
//                    url = new URL(fileUrl + "&OSSAccessKeyId=" + OSSAccessKeyId + "&Signature=" + Signature);
//                } else {
//                    url = new URL(fileUrl);
//                }
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("GET");
                conn.setConnectTimeout(10 * 1000);
@@ -142,7 +217,7 @@
                InputStream inputStream = conn.getInputStream();// 通过输入流获取图片数据
                byte[] data = readInputStream(inputStream);
                System.out.println("getImages获取图片成功");
//                System.out.println("getImages获取图片成功");
                return data;
            }