From 8185b9af62ea593fe63c4bff874436430ef5605c Mon Sep 17 00:00:00 2001 From: liyawei Date: Fri, 10 Jun 2022 09:42:56 +0800 Subject: [PATCH] =?UTF-8?q?ocr,=E6=8B=86=E5=88=86=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=88=87=E6=8D=A2cos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/jero/common/util/oss/CosBootUtil.java | 57 +++++++++++++++++++ .../oss/controller/SplitFileController.java | 21 ++++--- .../oss/service/impl/OSSFileServiceImpl.java | 34 +++++------ .../ocr/controller/OcrRestfulController.java | 6 +- .../service/impl/OcrRestfulServiceImpl.java | 11 ++-- .../FileSplitItemsEOController.java | 13 +++-- .../split/service/impl/FileSpiltService.java | 37 ++++++++---- .../src/main/resources/application-dev.yml | 4 +- 8 files changed, 126 insertions(+), 57 deletions(-) diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/oss/CosBootUtil.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/oss/CosBootUtil.java index 990d73bc0..46bcf1a42 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/oss/CosBootUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/oss/CosBootUtil.java @@ -169,6 +169,63 @@ public class CosBootUtil { } } + /** + * cos 上传 + * 相同key 文件会覆盖 + * @param bytev + * @param key + */ + public static void uploadByte(byte[] bytev, String key){ + init(); + Date expirationTime = new Date(System.currentTimeMillis() + 30 * 60 * 1000); + // 生成预签名上传 URL + URL url = cosClient.generatePresignedUrl(bucketName, key, expirationTime, HttpMethodName.PUT); + log.info("生成预签名上传URL:" + url); + int responseCode = upLoadFileByte(url.toString(), bytev); + if (responseCode == 200) { + log.info("上传成功!"); + } else { + log.info("上传失败!"); + } + cosClient.shutdown(); + } + + private static int upLoadFileByte(String singnedurl,byte[] bytev){ + InputStream inputStream= null; + DataOutputStream out = null; + int responseCode = 0; + try { + URL url= null; + url = new URL(singnedurl); + inputStream= new ByteArrayInputStream(bytev); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setDoOutput(true); + connection.setRequestMethod("PUT"); + out = new DataOutputStream(connection.getOutputStream()); + + // 写入要上传的数据 + IOUtils.copy(inputStream, out); + responseCode = connection.getResponseCode(); + log.info("Service returned response code " + responseCode); + } catch (ProtocolException e) { + log.error(e.getMessage(), e); + } catch (IOException e) { + log.error(e.getMessage(), e); + } finally { + try { + inputStream.close(); + } catch (IOException e) { + log.error(e.getMessage(), e); + } + try { + out.close(); + } catch (IOException e) { + log.error(e.getMessage(), e); + } + return responseCode; + } + } + /** * cos 下载 * @param key diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/oss/controller/SplitFileController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/oss/controller/SplitFileController.java index 43b79bf06..3a7e67f51 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/oss/controller/SplitFileController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/oss/controller/SplitFileController.java @@ -1,6 +1,7 @@ package com.jero.modules.oss.controller; import com.jero.common.exception.JeroBootException; +import com.jero.common.util.oss.CosBootUtil; import com.jero.modules.oss.SplitFileUtils; import com.jero.modules.oss.service.IOSSFileService; import javax.servlet.http.HttpServletRequest; @@ -14,11 +15,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import sun.misc.BASE64Decoder; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.OutputStream; +import java.io.*; import java.util.Base64; @Slf4j @@ -52,13 +49,15 @@ public class SplitFileController { "attachment; filename=\""+ SplitFileUtils.encodeFileName(fileName, request) +"\""); response.setContentType("application/force-download"); try(OutputStream os = response.getOutputStream(); - FileInputStream fis = new FileInputStream(fileUrl);) { - - int len = 0; - while ((len = fis.read()) != -1) { - os.write(len); + /*FileInputStream fis = new FileInputStream(fileUrl);*/) { + if (CosBootUtil.doesObjectExist(fileUrl)) { + FileInputStream fis = (FileInputStream) CosBootUtil.download(fileUrl); + int len = 0; + while ((len = fis.read()) != -1) { + os.write(len); + } + os.flush(); } - os.flush(); } catch (FileNotFoundException e) { throw new JeroBootException("文件不存在"); } catch (IOException e) { diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/oss/service/impl/OSSFileServiceImpl.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/oss/service/impl/OSSFileServiceImpl.java index 446e9a026..73533a058 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/oss/service/impl/OSSFileServiceImpl.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/oss/service/impl/OSSFileServiceImpl.java @@ -19,9 +19,11 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.FileCopyUtils; import org.springframework.web.multipart.MultipartFile; +import sun.misc.BASE64Encoder; import java.io.File; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; @@ -42,8 +44,8 @@ public class OSSFileServiceImpl extends ServiceImpl impl private String[] fileSuffixLimits; // 文档拆分条款图片访问路径 - @Value(value = "${jero.path.img}") - private String imgpath; + @Value(value = "${jero.splitUrl}") + private String splitUrl; @Override public void upload(MultipartFile multipartFile) throws IOException { @@ -290,10 +292,7 @@ public class OSSFileServiceImpl extends ServiceImpl impl String ctxPath = uploadCospath; String fileName = null; String fileType = null; - File file = new File(ctxPath + File.separator + bizPath + File.separator); - if (!file.exists()) { - file.mkdirs();// 创建文件根目录 - } + String orgName = mf.getOriginalFilename();// 获取文件名 orgName = CommonUtils.getFileName(orgName); if (orgName.indexOf(".") != -1) { @@ -302,6 +301,7 @@ public class OSSFileServiceImpl extends ServiceImpl impl fileName = orgName + "_" + System.currentTimeMillis(); } + String filePath = ctxPath + "/" + fileName; fileType = orgName.substring(orgName.lastIndexOf(".")); String fileTypeStr = ".doc,.DOC,.docx,.DOCX,.xls, .XLS,.xlsx,.XLSX,.pdf,.PDF"; //判断文件类型 @@ -344,32 +344,24 @@ public class OSSFileServiceImpl extends ServiceImpl impl } } - String savePath = file.getPath() + File.separator + fileName; - File savefile = new File(savePath); - FileCopyUtils.copy(mf.getBytes(), savefile); - String dbpath = null; - if (oConvertUtils.isNotEmpty(bizPath)) { - dbpath = bizPath + File.separator + fileName; - } else { - dbpath = fileName; - } - if (dbpath.contains("\\")) { - dbpath = dbpath.replace("\\", "/"); - } + // 将文件上传至腾讯云 cos + CosBootUtil.upload(mf, filePath); LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); //存入文件表 oSSFile.setFileName(orgName); oSSFile.setId(UuidUtils.getUUID()); - oSSFile.setUrl(savePath); + oSSFile.setUrl(filePath); oSSFile.setCreateBy(loginUser.getUsername()); oSSFile.setCreateTime(new Date()); this.save(oSSFile); // 文件路径做特殊处理 - String imgUrl = imgpath + savePath.substring(savePath.lastIndexOf(File.separator)+1); + BASE64Encoder base64Encoder = new BASE64Encoder(); + String encode = base64Encoder.encode(filePath.getBytes(StandardCharsets.UTF_8)); + String imgUrl = splitUrl + "/jero-boot/sys/split/file/getImage?fileUrl=" + encode; oSSFile.setUrl(imgUrl); return oSSFile; - } catch (IOException e) { + } catch (Exception e) { log.error(e.getMessage(), e); } return oSSFile; diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ocr/controller/OcrRestfulController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ocr/controller/OcrRestfulController.java index acdb9bd31..dc28a0cf5 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ocr/controller/OcrRestfulController.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ocr/controller/OcrRestfulController.java @@ -6,6 +6,7 @@ import com.jero.common.api.vo.Result; import com.jero.common.constant.enums.CutEnum; import com.jero.common.exception.JeroBootException; import com.jero.common.system.vo.LoginUser; +import com.jero.common.util.oss.CosBootUtil; import com.jero.modules.ocr.entity.OcrRecordEO; import com.jero.modules.ocr.enums.ResultContentEnum; import com.jero.modules.ocr.service.IOcrRecordEOService; @@ -88,7 +89,10 @@ public class OcrRestfulController{ response.setContentType("application/octet-stream"); String fullPath = ocrPath + fileName; - is = new FileInputStream(fullPath); +// is = new FileInputStream(fullPath); + if (CosBootUtil.doesObjectExist(fullPath)) { + is = CosBootUtil.download(fullPath); + } os = response.getOutputStream(); IOUtils.copy(is, os); os.flush(); diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ocr/service/impl/OcrRestfulServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ocr/service/impl/OcrRestfulServiceImpl.java index e230df951..542c8d362 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ocr/service/impl/OcrRestfulServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ocr/service/impl/OcrRestfulServiceImpl.java @@ -3,6 +3,7 @@ package com.jero.modules.ocr.service.impl; import com.alibaba.fastjson.JSONObject; import com.jero.common.api.vo.Result; import com.jero.common.constant.enums.CutEnum; +import com.jero.common.util.oss.CosBootUtil; import com.jero.modules.FeignClient.LocalToolFeignClient; import com.jero.modules.ocr.entity.OcrRecordEO; import com.jero.modules.ocr.entity.OcrResultEO; @@ -227,15 +228,17 @@ public class OcrRestfulServiceImpl implements IOcrRestfulService { String saveWordFileName=null; if(wordFile!=null && !wordFile.isEmpty()){ saveWordFileName= UUIDUtils.randomUUID20() + "_"+wordFile.getOriginalFilename(); - saveWordFilePath=ocrFilePath+saveWordFileName; - FileUtils.copyInputStreamToFile(wordFile.getInputStream(),new File(saveWordFilePath)); + saveWordFilePath= ocrFilePath + saveWordFileName; +// FileUtils.copyInputStreamToFile(wordFile.getInputStream(),new File(saveWordFilePath)); + CosBootUtil.upload(wordFile, saveWordFilePath); } String saveJsonFilePath=null; String saveJsonFileName=null; if(jsonFile!=null && !jsonFile.isEmpty()){ saveJsonFileName=UUIDUtils.randomUUID20() + "_"+jsonFile.getOriginalFilename(); - saveJsonFilePath=ocrFilePath+saveJsonFileName; - FileUtils.copyInputStreamToFile(jsonFile.getInputStream(),new File(saveJsonFilePath)); + saveJsonFilePath= ocrFilePath + saveJsonFileName; +// FileUtils.copyInputStreamToFile(jsonFile.getInputStream(),new File(saveJsonFilePath)); + CosBootUtil.upload(jsonFile, saveJsonFilePath); } //开始将文件保存至数据库中 if(StringUtils.isNotEmpty(saveWordFilePath) && StringUtils.isNotEmpty(saveJsonFilePath)){ diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/controller/FileSplitItemsEOController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/controller/FileSplitItemsEOController.java index 11ccd2fc5..03c6ca124 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/controller/FileSplitItemsEOController.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/controller/FileSplitItemsEOController.java @@ -311,12 +311,13 @@ public class FileSplitItemsEOController extends JeroController 0 && messageList.size() > 0) { sarFileSplitMenuEOMapper.insertForeach(treeList); @@ -2557,19 +2575,14 @@ public class FileSpiltService { XWPFPictureData pictureData = p.getDocument().getPictureDataByID(pictureId); String imageName = UUIDUtils.randomUUID10() + pictureData.getFileName(); byte[] bytev = pictureData.getData(); - String outPath = filePath + File.separator; - File file1 = new File(outPath); - if (!file1.exists()) { - file1.mkdirs(); - } - String filepathandname = filePath + File.separator + imageName; + String filepathandname = filePathCos + "/" + imageName; try { - FileOutputStream fos = new FileOutputStream(filepathandname); - fos.write(bytev); + // String fileUrl = splitUrl + "/" + filepathandname; BASE64Encoder base64Encoder = new BASE64Encoder(); String encode = base64Encoder.encode(filepathandname.getBytes(StandardCharsets.UTF_8)); String path = splitUrl+"/jero-boot/sys/split/file/getImage?fileUrl="+encode; + CosBootUtil.uploadByte(bytev, encode); String imgCon = path; String imgConVal = ""; message.getItemsCondi().add(imgConVal); diff --git a/jero-boot/jero-boot-single-startup/src/main/resources/application-dev.yml b/jero-boot/jero-boot-single-startup/src/main/resources/application-dev.yml index ffbb27d3f..f763e0fd3 100644 --- a/jero-boot/jero-boot-single-startup/src/main/resources/application-dev.yml +++ b/jero-boot/jero-boot-single-startup/src/main/resources/application-dev.yml @@ -197,7 +197,7 @@ jero : #文件上传根目录 设置 uploadCos: /upFiles upload: D://opt//upFiles - img: D://opt//upFiles/ + img: /upFiles/ #webapp文件路径 webapp: D://opt//webapp #导出pdf临时文件路径 设置 @@ -336,7 +336,7 @@ OCR: # OCR接口公钥 publicKey: EC4KKA6ZDTCPAOCRBC5M # OCR文件存储路径 - ocrPath: D:/APPSOFT/LAWSOCRDEMO/OCRFILE/ + ocrPath: /ocrFiles/ #ocrPath: /data/DeploymentPackage/laws-shanqi/APPSOFT/LAWSOCRDEMO/OCRFILE/ # OCR文件下载地址(onlyoffice专用) ocrDownPath: http://10.0.1.25:8080/jero-boot/ocr/ocrCheck/downFile