ke
2024-11-30 229bc82734b718d4817e0971167a3830c56fa885
白蚁新模块。图片上传接口。更新11-30 13:00
6 files modified
1 files added
267 ■■■■ changed files
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/HttpUploadFileHandler.java 185 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/utils/HttpResponseUtils.java 16 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/entity/XfByPic.java 39 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/mapper/BaiyiPicMapper.java 3 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/mapper/BaiyiPicMapper.xml 13 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/service/BaiyiPicService.java 3 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/service/impl/BaiyiPicServiceImpl.java 8 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/HttpUploadFileHandler.java
@@ -7,6 +7,7 @@
import cn.gistack.by.nettyUpload.utils.UriUtils;
import cn.gistack.by.nettyUpload.utils.ExceptionUtils;
import cn.gistack.by.picUpload.entity.BaiyiPicEntity;
import cn.gistack.by.picUpload.entity.XfByPic;
import cn.gistack.by.picUpload.service.BaiyiPicService;
import cn.gistack.resource.feign.IOssClient;
import cn.hutool.core.date.DateUtil;
@@ -17,8 +18,7 @@
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.handler.codec.http.*;
import io.netty.handler.codec.http.multipart.DiskAttribute;
import io.netty.handler.codec.http.multipart.DiskFileUpload;
import io.netty.handler.codec.http.multipart.*;
import io.netty.util.CharsetUtil;
import lombok.extern.slf4j.Slf4j;
@@ -27,11 +27,12 @@
import java.net.URISyntaxException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import static cn.gistack.by.nettyUpload.utils.ExceptionUtils.getStackString;
@@ -42,12 +43,15 @@
 */
@Slf4j
public class  HttpUploadFileHandler extends SimpleChannelInboundHandler<FullHttpRequest> {
    private static final String UPLOAD_FILE_URL = "/postfile";
    // http请求中可选参数
    private static final String FILENAME_PARAM = "filename";
    // http请求中必选的参数
    private static final String FILE_EXTNAME_PARAM = "fileextname";
    private static final String UPLOAD_DATA_URL = "/termite/syncDeviceState";
    private static final String UPLOAD_FILE_URL = "/termite/termiteDataup";
    private NettyHttpConfig nettyHttpConfig;
    private BaiyiPicService baiyiPicService;
@@ -78,91 +82,130 @@
    protected void channelRead0(ChannelHandlerContext ctx, FullHttpRequest fullRequest) throws Exception {
        System.err.println("fullRequest:::"+fullRequest);
        boolean isRequestValid = isValidHttpRequest(ctx, fullRequest);
        if (!isRequestValid) {
            log.warn("Discard invalid request.");
        // Authorization验证
        boolean isRequestValid = isValidHttpRequest(ctx, fullRequest);
        if (!isRequestValid) {
            HttpResponseUtils.sendResponseJson2(ctx, HttpResponseStatus.BAD_REQUEST, "验证失败",null);
            return ;
        }
        // 请求路径验证
        String urlyz = urlyz(ctx, fullRequest);
        if (UPLOAD_FILE_URL.equals(urlyz)) { //传图片
            HttpPostMultipartRequestDecoder test = new HttpPostMultipartRequestDecoder(fullRequest);
            List<InterfaceHttpData> bodyHttpDatas = test.getBodyHttpDatas();
            XfByPic xfByPic = new XfByPic();
            //HttpResponseUtils.sendResponseJson(ctx, HttpResponseStatus.BAD_REQUEST, "验证失败");
            return;
        }
            for (InterfaceHttpData item : bodyHttpDatas ) {
                if ( item instanceof Attribute){
                    Attribute attribute = (Attribute)item;
                    System.out.println("getName:::"+attribute.getName());
                    System.out.println("getValue:::"+attribute.getValue());
                    String value = attribute.getValue();
                    switch(attribute.getName()){
                        case "mnNo":
                            xfByPic.setMnNo(value);
                            break;
                        case "order":
        // 解析出文件路径
//        String filePath = parseFilePath(fullRequest);
//        System.err.println(filePath);
//        RandomAccessFile file = getSaveFile(filePath);
//        file.seek(0);
//        file.write(ByteBufUtil.getBytes(fullRequest.content()));
//        file.close();
                            xfByPic.setOrder(value);
                            break;
                        case "sn":
                            xfByPic.setSn(value);
                            break;
                        case "ap":
                            xfByPic.setAp(value);
                            break;
                        case "camera":
                            xfByPic.setCamera(value);
                            break;
                        case "hardware":
                            xfByPic.setHardware(value);
                            break;
                        case "rssi":
                            xfByPic.setRssi(value);
                            break;
                        case "software":
                            xfByPic.setSoftware(value);
                            break;
                        case "temperature":
                            xfByPic.setTemperature(value);
                            break;
                        case "voltage":
                            xfByPic.setVoltage(value);
                            break;
                    }
        //String fileName = this.parseFileName(fullRequest);
        String fileName = System.currentTimeMillis()  + ".jpg";
                } else if (item instanceof FileUpload) {
        ByteArrayInputStream stream = new ByteArrayInputStream(ByteBufUtil.getBytes(fullRequest.content()));
        MockMultipartFile multipartFile
            = new MockMultipartFile("11", fileName, "application/octet-stream", stream);
                    FileUpload file = (FileUpload)item;
                    String filename = file.getFilename();
                    ByteArrayInputStream stream = new ByteArrayInputStream(ByteBufUtil.getBytes(file.getByteBuf()));
                    MockMultipartFile multipartFile
                        = new MockMultipartFile("11", filename, "application/octet-stream", stream);
                    String picurl = iOssClient.uploadFile(filename, multipartFile);
                    log.info("图片上传地址::"+picurl);
                    xfByPic.setImageurl(picurl);
                }
            }
            xfByPic.setCreatedAt(new Date());
            // 保存入库xfByPic
            baiyiPicService.inserXfPicUrl(xfByPic);
        // 上传荆楚水库的文件地址
//        System.err.println("iOssClient::");
//        System.err.println(iOssClient.getClass().getName());
//        System.err.println(iOssClient);
        } else if(UPLOAD_DATA_URL.equals(urlyz)) { //传数据
            HttpPostMultipartRequestDecoder test = new HttpPostMultipartRequestDecoder(fullRequest);
            List<InterfaceHttpData> bodyHttpDatas = test.getBodyHttpDatas();
            for (InterfaceHttpData item : bodyHttpDatas ) {
                if (  item instanceof Attribute){
//                    FileUpload file = (FileUpload)item;
//                    String filename = file.getFilename();
//                    ByteArrayInputStream stream = new ByteArrayInputStream(ByteBufUtil.getBytes(file.getByteBuf()));
//                    MockMultipartFile multipartFile
//                        = new MockMultipartFile("11", filename, "application/octet-stream", stream);
//                    String picurl = iOssClient.uploadFile(filename, multipartFile);
//                    log.info("图片上传地址::"+picurl);
        String picurl = iOssClient.uploadFile(fileName, multipartFile);
//        System.err.println("图片上传地址"+picurl);
        log.info("图片上传地址::"+picurl);
                } else if (item instanceof FileUpload) {
                    System.out.println("Attribute:::"+item.getName());
        // 请求参数放入实体中
        BaiyiPicEntity baiyiPicEntity = parseEntity(fullRequest);
        baiyiPicEntity.setPicUrl(picurl);
        baiyiPicEntity.setPicStatus(1);
        //baiyiPicEntity存入数据库
        baiyiPicService.inserpicData(baiyiPicEntity);
                }
            }
        } else {
            HttpResponseUtils.sendResponseJson2(ctx, HttpResponseStatus.BAD_REQUEST, "验证失败",null);
            return ;
        }
        HttpResponseUtils.sendResponseJson(ctx, HttpResponseStatus.OK, "上传成功");
    }
    private BaiyiPicEntity parseEntity(FullHttpRequest fullRequest) throws URISyntaxException {
        URI uri = UriUtils.getURI(fullRequest);
        Map<String, String> queryParams = UriUtils.getQueryParams(uri);
    // 请求路径验证
    public  String  urlyz(ChannelHandlerContext ctx, FullHttpRequest request) {
        try {
        String mnNo = queryParams.get("mnNo");
        String order = queryParams.get("order");
        String obTime = queryParams.get("obTime");
        String obDatestr = queryParams.get("obDate");
        Date obDate = DateUtil.parse(obDatestr, "yyyy-MM-dd HH:mm:ss");
            URI uri = UriUtils.getURI(request);
            System.err.println("uri.getPath()::::"+uri.getPath());
            System.err.println(""+uri.getPath());
        String stationIdstr = queryParams.get("stationId");
        Integer stationId = Integer.parseInt(stationIdstr);
        String stationName = queryParams.get("stationName");
        String deviceIdstr = queryParams.get("deviceId");
        Integer deviceId = Integer.parseInt(deviceIdstr);
        String deviceName = queryParams.get("deviceName");
        String receiveTypestr = queryParams.get("receiveType");
        Integer receiveType = Integer.parseInt(receiveTypestr);
        BaiyiPicEntity baiyiPicEntity = new BaiyiPicEntity();
        baiyiPicEntity.setMnNo(mnNo);
        baiyiPicEntity.setOrder(order);
        baiyiPicEntity.setDeviceId(deviceId);
        baiyiPicEntity.setObTime(obTime);
        baiyiPicEntity.setObDate(obDate);
        baiyiPicEntity.setReceiveType(receiveType);
        baiyiPicEntity.setStationId(stationId);
        baiyiPicEntity.setStationName(stationName);
        baiyiPicEntity.setDeviceName(deviceName);
        baiyiPicEntity.setCreatedAt(new Date());
        return  baiyiPicEntity;
            if (uri.getPath().startsWith(UPLOAD_DATA_URL)) {
                return UPLOAD_DATA_URL;
            } else if (uri.getPath().startsWith(UPLOAD_FILE_URL)) {
                return UPLOAD_FILE_URL;
            }
        } catch (Exception exception) {
            exception.printStackTrace();
            log.error(getStackString(exception));
            return null;
        }
        return null;
    }
    public static MultipartFile convert(File file) throws IOException {
@@ -193,7 +236,7 @@
    private boolean isValidHttpRequest(ChannelHandlerContext ctx, FullHttpRequest request) {
        try {
            URI uri = UriUtils.getURI(request);
            log.info(uri.getPath());
//            log.info(uri.getPath());
            // authorization效验
            String authorization = request.headers().get("Authorization");
            if(!this.nettyHttpConfig.getAuthorization().equals(authorization)) {
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/nettyUpload/utils/HttpResponseUtils.java
@@ -9,6 +9,8 @@
import io.netty.handler.codec.http.HttpResponseStatus;
import io.netty.util.CharsetUtil;
import java.util.Map;
import static io.netty.handler.codec.http.HttpHeaders.Names.CONTENT_TYPE;
import static io.netty.handler.codec.http.HttpVersion.HTTP_1_1;
@@ -49,4 +51,18 @@
        ctx.writeAndFlush(response).addListener(ChannelFutureListener.CLOSE);
    }
    public static void sendResponseJson2(ChannelHandlerContext ctx, HttpResponseStatus status,
                                         String message,Map<String, Object> map) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("code", status.code());
        jsonObject.put("msg", message);
        jsonObject.put("data", map);
        FullHttpResponse response = new DefaultFullHttpResponse(
            HTTP_1_1, status, Unpooled.copiedBuffer(jsonObject.toJSONString(), CharsetUtil.UTF_8));
        response.headers().set(CONTENT_TYPE, "application/json; charset=UTF-8");
        ctx.writeAndFlush(response).addListener(ChannelFutureListener.CLOSE);
    }
}
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/entity/XfByPic.java
New file
@@ -0,0 +1,39 @@
package cn.gistack.by.picUpload.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.util.Date;
@Data
public class XfByPic {
    @NotBlank(message = "设备编码不能为空")
    @ApiModelProperty("RTU编码")
    private String mnNo;
    @NotBlank(message = "白蚁设备安装的点位顺序不能为空")
    @ApiModelProperty("白蚁设备安装的点位顺序")
    private String order;
    @ApiModelProperty("白蚁设备编号顺序")
    private String sn;
    private String ap;
    private String camera;
    private String hardware;
    private String imageurl;
    private String rssi;
    private String software;
    private String temperature;
    private String voltage;
    @ApiModelProperty("创建时间")
    private Date createdAt;
}
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/mapper/BaiyiPicMapper.java
@@ -1,10 +1,13 @@
package cn.gistack.by.picUpload.mapper;
import cn.gistack.by.picUpload.entity.BaiyiPicEntity;
import cn.gistack.by.picUpload.entity.XfByPic;
import org.apache.ibatis.annotations.Param;
public interface BaiyiPicMapper {
    void inserpicData(@Param("item") BaiyiPicEntity entity);
    void inserXfPicUrl(@Param("item") XfByPic entity);
}
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/mapper/BaiyiPicMapper.xml
@@ -15,4 +15,17 @@
            )
    </insert>
    <insert id="inserXfPicUrl" >
        insert into
            SJZT_ODS."water_data_termites_url_xf"
        ("mn_no",  "order", "sn", "ap",
         "camera","hardware", "imageurl", "rssi", "software",  "temperature" , "voltage" ,"created_at")
            VALUE
            (
            #{item.mnNo},#{item.order},#{item.sn},#{item.ap},#{item.camera},#{item.hardware},#{item.imageurl},
            #{item.rssi},#{item.software},#{item.temperature},#{item.voltage},#{item.createdAt}
            )
    </insert>
</mapper>
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/service/BaiyiPicService.java
@@ -2,7 +2,10 @@
import cn.gistack.by.picUpload.entity.BaiyiPicEntity;
import cn.gistack.by.picUpload.entity.XfByPic;
public interface BaiyiPicService {
    void inserpicData(BaiyiPicEntity entity);
    void inserXfPicUrl(XfByPic entity);
}
skjcmanager/skjcmanager-service/skjcmanager-by/src/main/java/cn/gistack/by/picUpload/service/impl/BaiyiPicServiceImpl.java
@@ -1,6 +1,7 @@
package cn.gistack.by.picUpload.service.impl;
import cn.gistack.by.picUpload.entity.BaiyiPicEntity;
import cn.gistack.by.picUpload.entity.XfByPic;
import cn.gistack.by.picUpload.mapper.BaiyiPicMapper;
import cn.gistack.by.picUpload.service.BaiyiPicService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -11,9 +12,14 @@
    @Autowired
    private BaiyiPicMapper baiyiPicMapper;
    @Override
    public void inserpicData(BaiyiPicEntity entity) {
        baiyiPicMapper.inserpicData(entity);
    }
    @Override
    public void inserXfPicUrl(XfByPic entity) {
        baiyiPicMapper.inserXfPicUrl(entity);
    }
}