Răsfoiți Sursa

远程文件读取接口代码提交

jingyuanchao 1 an în urmă
părinte
comite
c626e96120

+ 8 - 5
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteFileService.java

@@ -11,10 +11,7 @@ import com.xunmei.system.api.factory.RemoteFileFallbackFactory;
 import feign.Response;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestPart;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.Map;
@@ -47,10 +44,13 @@ public interface RemoteFileService {
 
     @PostMapping(value = "/file/generateResumptionPdf")
     R<String> generateResumptionPdf(@RequestBody Map<String, Object> data);
+
     @PostMapping(value = "/file/generateSafeCheckPdf")
     R<String> generateSafeCheckPdf(@RequestBody SafeCheckTaskRegisterBookVo data);
+
     @PostMapping(value = "/file/generateAccessPdf")
     R<String> generateAccessPdf(@RequestBody AccessPdf data);
+
     /**
      * 生成预案演练登记簿
      *
@@ -87,7 +87,7 @@ public interface RemoteFileService {
     @GetMapping(value = "/file/getStaticPathPrefix")
     R<String> getStaticPathPrefix();
 
-    @PostMapping(value = "/file/registerBookCompressPdf",consumes = MediaType.APPLICATION_JSON_VALUE)
+    @PostMapping(value = "/file/registerBookCompressPdf", consumes = MediaType.APPLICATION_JSON_VALUE)
     Response registerBookCompressPdf(@RequestBody ExportPdfDto exportDto);
 
     @PostMapping(value = "/file/cutFileCompress")
@@ -95,4 +95,7 @@ public interface RemoteFileService {
 
     @GetMapping(value = "/file/deletedZipFile")
     void deletedZipFile();
+
+    @PostMapping(value = "/file/readFile/{path}", consumes = MediaType.APPLICATION_JSON_VALUE)
+    Response readFile(@PathVariable String path);
 }

+ 5 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteFileFallbackFactory.java

@@ -91,6 +91,11 @@ public class RemoteFileFallbackFactory implements FallbackFactory<RemoteFileServ
             public R<String> generateOutInPdf(Map<String, Object> data) {
                 return null;
             }
+
+            @Override
+            public Response readFile(String path) {
+                throw new RuntimeException("读取文件超时,请稍后重试!");
+            }
         };
     }
 }

+ 5 - 0
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/controller/SysFileController.java

@@ -214,4 +214,9 @@ public class SysFileController {
     void deletedZipFile(){
         sysFileService.deletedZipFile();
     }
+
+    @GetMapping(value = "/readFile/{path}")
+    void readFile(@PathVariable String path,HttpServletResponse response)throws IOException {
+        sysFileService.readFile(path,response);
+    }
 }

+ 2 - 0
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/service/ISysFileService.java

@@ -77,4 +77,6 @@ public interface ISysFileService
     void deletedZipFile();
 
     String generateOutInPdf(Map<String, Object> data)throws Exception;
+
+    void readFile(String path,HttpServletResponse response) throws IOException;
 }

+ 26 - 4
soc-modules/soc-modules-file/src/main/java/com/xunmei/file/service/LocalSysFileServiceImpl.java

@@ -1,14 +1,16 @@
 package com.xunmei.file.service;
 
 import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.lowagie.text.*;
-import com.lowagie.text.pdf.*;
+import com.lowagie.text.pdf.BaseFont;
+import com.lowagie.text.pdf.PdfPCell;
+import com.lowagie.text.pdf.PdfPTable;
+import com.lowagie.text.pdf.PdfWriter;
 import com.xunmei.common.core.constant.CacheConstants;
 import com.xunmei.common.core.domain.IdName;
 import com.xunmei.common.core.domain.registerbook.dto.CoreRegisterBookPdfExportDto;
@@ -22,7 +24,6 @@ import com.xunmei.common.core.utils.uuid.UUID;
 import com.xunmei.common.redis.utils.RedisUtils;
 import com.xunmei.file.utils.FileDownUtils;
 import com.xunmei.file.utils.FileUploadUtils;
-import com.xunmei.file.utils.PdfPageHelperEvent;
 import com.xunmei.file.utils.PdfUtil;
 import com.xunmei.file.vo.FileBase64Vo;
 import com.xunmei.file.vo.ItextPdfTableVo;
@@ -34,7 +35,6 @@ import io.netty.util.internal.StringUtil;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.text.StringEscapeUtils;
-import org.apache.poi.ss.usermodel.Footer;
 import org.apache.tools.zip.ZipEntry;
 import org.apache.tools.zip.ZipOutputStream;
 import org.slf4j.Logger;
@@ -937,4 +937,26 @@ public class LocalSysFileServiceImpl implements ISysFileService {
                 .filter(file -> file.getName().endsWith(".zip"))
                 .forEach(FileUtil::del);
     }
+
+    @Override
+    public void readFile(String path,HttpServletResponse response) throws IOException {
+        if (ObjectUtil.isEmpty(path)) {
+            throw new RuntimeException("文件地址无效");
+        }
+        // 对网络地址进行解码
+        path = URLDecoder.decode(path, "UTF-8");
+        // 读取图片文件
+        File imageFile = new File(path);
+        try (BufferedInputStream bis = new BufferedInputStream(Files.newInputStream(imageFile.toPath()))) {
+            // 设置响应类型
+            response.setContentType("image/*");
+            response.setHeader("Content-Length", String.valueOf(imageFile.length()));
+            // 将文件流发送给前端
+            byte[] buffer = new byte[1024];
+            int bytesRead;
+            while ((bytesRead = bis.read(buffer)) != -1) {
+                response.getOutputStream().write(buffer, 0, bytesRead);
+            }
+        }
+    }
 }

+ 36 - 4
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/controller/DataController.java

@@ -2,9 +2,12 @@ package com.xunmei.mediator.api.controller;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
-import com.xunmei.common.core.web.domain.AjaxResult;
-import com.xunmei.mediator.api.service.*;
+import com.xunmei.mediator.api.service.IIotDeviceService;
+import com.xunmei.mediator.api.service.IIotDvrChannelService;
+import com.xunmei.mediator.api.service.IotDeviceDetectionService;
+import com.xunmei.mediator.api.service.IotSensorService;
 import com.xunmei.system.api.RemoteDeviceService;
+import com.xunmei.system.api.RemoteFileService;
 import com.xunmei.system.api.dto.DataPageDto;
 import com.xunmei.system.api.dto.SensorDto;
 import com.xunmei.system.api.dto.SensorStatusDto;
@@ -12,13 +15,19 @@ import com.xunmei.system.api.dto.device.DeviceDto;
 import com.xunmei.system.api.dto.protection.NetworkDeviceDetectionEditDto;
 import com.xunmei.system.api.dto.protection.ReceiveErrorDto;
 import com.xunmei.system.api.util.LogUtils;
+import feign.Response;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.List;
 
 /**
@@ -109,7 +118,6 @@ public class DataController {
     }
 
 
-
     @ApiOperation(value = "传感器通用设备信息同步", notes = "直连主机传感器,每个完整的包为一个机构机构数据,非所有机构数据")
     @PostMapping({"/api/data/sensorCommonList"})
     public ReceiveErrorDto sensor(String msgId, @RequestBody DataPageDto<SensorDto> sensors) {
@@ -168,4 +176,28 @@ public class DataController {
 
     }
 
+    @Resource
+    private RemoteFileService fileService;
+
+    @ApiOperation("传感器通用设备信息同步")
+    @PostMapping({"/api/test/{path}"})
+    public void sensor(@PathVariable String path, HttpServletResponse response) throws IOException {
+        Response result = fileService.readFile(path);
+        Response.Body body = result.body();
+        InputStream inputStream = body.asInputStream();
+        BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
+        response.setHeader("Content-Disposition", result.headers().get("Content-Disposition").toString().replace("[", "").replace("]", ""));
+        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(response.getOutputStream());
+        int length = 0;
+        byte[] temp = new byte[1024 * 10];
+        while ((length = bufferedInputStream.read(temp)) != -1) {
+            bufferedOutputStream.write(temp, 0, length);
+        }
+        bufferedOutputStream.flush();
+        bufferedOutputStream.close();
+        bufferedInputStream.close();
+        inputStream.close();
+
+
+    }
 }