huangtf 2 лет назад
Родитель
Сommit
20c9bcd797

+ 18 - 0
blade-common/src/main/java/org/springblade/common/constant/OssConstant.java

@@ -0,0 +1,18 @@
+package org.springblade.common.constant;
+
+public interface OssConstant {
+
+    /**
+     * 临时目录路径
+     */
+    String TEMP_DIRECTORY = "/showtmp";
+    /**
+     * 归档目录路径
+     */
+    String ARCHIVE_DIRECTORY = "/archive";
+
+    /**
+     * 分隔符
+     */
+    String SEPARATOR = "__";
+}

+ 4 - 0
blade-ops-api/blade-resource-api/src/main/java/org/springblade/resource/feign/NewIOSSClient.java

@@ -19,6 +19,7 @@ public interface NewIOSSClient {
     String UPLOAD_FILE_INFO_BYTE = API_PREFIX + "/uploadFileInfoByte";
     String UPLOAD_FILE_INFO_INPUT_STREAM = API_PREFIX + "/uploadFileInfoInputStream";
     String REMOVE_PDF_FILE = API_PREFIX + "/remove-file";
+    String UPLOAD_FILE_INFO_WITH_PATH = API_PREFIX + "/uploadFileInfoWithPath";
 
     @PostMapping(value = UPLOAD_FILE_INFO_INPUT_STREAM, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
     BladeFile uploadFileByInputStream(MultipartFile file);
@@ -26,6 +27,9 @@ public interface NewIOSSClient {
     @PostMapping(UPLOAD_FILE_INFO)
     BladeFile uploadFile(@RequestParam String fileName, @RequestParam String localFileUrl);
 
+    @PostMapping(UPLOAD_FILE_INFO_WITH_PATH)
+    BladeFile uploadFile(@RequestParam String fileName, @RequestParam  String filePath, @RequestParam  String localFileUrl);
+
     @PostMapping(UPLOAD_FILE_INFO_BYTE)
     BladeFile updateFile(@RequestBody byte[] fileByte, @RequestParam String fileName);
 

+ 84 - 0
blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/ossre/AliossTemplateRe.java

@@ -4,6 +4,7 @@ import com.aliyun.oss.OSSClient;
 import com.aliyun.oss.common.utils.BinaryUtil;
 import com.aliyun.oss.model.*;
 
+import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
 import java.util.Date;
@@ -305,4 +306,87 @@ public class AliossTemplateRe implements OssTemplateRe {
         InitiateMultipartUploadResult initResult = this.ossClient.initiateMultipartUpload(request);
         return initResult;
     }
+
+    public BladeFile putFileWithPath(String fileName, String filePath,InputStream stream) {
+        try {
+
+            String suffix = "";
+            int indexOfDot = fileName.lastIndexOf('.');
+            if (indexOfDot > 0) {
+                suffix = fileName.substring(indexOfDot + 1);
+            }
+
+
+            String ossUrl = "";
+            // 判断容器是否存在,不存在就创建
+            String bucket=getBucketName();
+            if (!ossClient.doesBucketExist(bucket)) {
+                ossClient.createBucket(bucket);
+                CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucket);
+                createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
+                ossClient.createBucket(createBucketRequest);
+            }
+            // 设置文件路径和名称
+            String fileUrl = filePath + "/" + fileName;
+            ObjectMetadata objectMetadata = new ObjectMetadata();
+            objectMetadata.setContentType(getcontentType(suffix));
+            ossUrl = getOssHost() + fileUrl;
+
+            // 上传文件
+            PutObjectResult result = ossClient.putObject(new PutObjectRequest(bucket, fileUrl, stream,objectMetadata));
+
+            BladeFile file = new BladeFile();
+            file.setOriginalName(fileName);
+            file.setName(fileName);
+            file.setDomain(this.getOssHost(bucket));
+            file.setLink(ossUrl);
+            return file;
+        } catch (Throwable var9) {
+            throw var9;
+        }
+    }
+
+
+    //判断文件的格式
+    public  String getcontentType(String filenameExtension) {
+        if (".bmp".equalsIgnoreCase(filenameExtension)) {
+            return "image/bmp";
+        }
+        if (".gif".equalsIgnoreCase(filenameExtension)) {
+            return "image/gif";
+        }
+        if (".jpeg".equalsIgnoreCase(filenameExtension) || ".jpg".equalsIgnoreCase(filenameExtension)
+                || ".png".equalsIgnoreCase(filenameExtension)) {
+            return "image/jpg";
+        }
+        if(".mp4".equalsIgnoreCase(filenameExtension)){
+            return "video/mpeg4";
+        }
+        if (".html".equalsIgnoreCase(filenameExtension)) {
+            return "text/html";
+        }
+        if (".txt".equalsIgnoreCase(filenameExtension)) {
+            return "text/plain";
+        }
+        if (".vsd".equalsIgnoreCase(filenameExtension)) {
+            return "application/vnd.visio";
+        }
+        if (".pptx".equalsIgnoreCase(filenameExtension) || ".ppt".equalsIgnoreCase(filenameExtension)) {
+            return "application/vnd.ms-powerpoint";
+        }
+        if (".docx".equalsIgnoreCase(filenameExtension) || ".doc".equalsIgnoreCase(filenameExtension)) {
+            return "application/msword";
+        }
+        if (".xml".equalsIgnoreCase(filenameExtension)) {
+            return "text/xml";
+        }
+        if (".pdf".equalsIgnoreCase(filenameExtension)) {
+            return "application/pdf";
+        }
+        if (".xls".equalsIgnoreCase(filenameExtension) || ".xlsx".equalsIgnoreCase(filenameExtension)
+                || ".xlt".equalsIgnoreCase(filenameExtension)) {
+            return "application/x-xls";
+        }
+        return "application/pdf";
+    }
 }

+ 6 - 0
blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/ossre/OssTemplateRe.java

@@ -2,6 +2,9 @@ package org.springblade.resource.builder.ossre;
 
 import com.aliyun.oss.model.*;
 import org.springblade.core.oss.OssTemplate;
+import org.springblade.core.oss.model.BladeFile;
+
+import java.io.InputStream;
 
 
 public interface OssTemplateRe extends OssTemplate {
@@ -14,4 +17,7 @@ public interface OssTemplateRe extends OssTemplate {
 
     // OSS 分片上传 初始化
     InitiateMultipartUploadResult initiateMultipartUpload(InitiateMultipartUploadRequest request);
+
+    //指定路径上传
+    BladeFile putFileWithPath(String fileName, String filePath,InputStream stream);
 }

+ 12 - 0
blade-ops/blade-resource/src/main/java/org/springblade/resource/feign/NewIOSSClientImpl.java

@@ -66,4 +66,16 @@ public class NewIOSSClientImpl implements NewIOSSClient {
         }
         return null;
     }
+
+    @Override
+    public BladeFile uploadFile(String fileName, String filePath, String localFileUrl) {
+        try {
+            //获取文件流
+            InputStream inputStream = new FileInputStream(new File(localFileUrl));
+            return this.ossBuilder.template().putFileWithPath(fileName,filePath, inputStream);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
 }

+ 1 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/service/IArchiveAutoPdfService.java

@@ -27,5 +27,5 @@ public interface IArchiveAutoPdfService {
     boolean refreshFileNumber(ArchivesAuto archive,String fileNumber);
 
     //合并pdf
-    String MergePdfAndUpload(List<String> urlList,String fileName) ;
+    String MergePdfAndUpload(List<String> urlList,String fileName,String filePath) ;
 }

+ 14 - 4
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveAutoPdfServiceImpl.java

@@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.itextpdf.text.Element;
 import com.itextpdf.text.pdf.*;
 import lombok.AllArgsConstructor;
+import org.apache.commons.lang.StringUtils;
 import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.util.IOUtils;
 import org.springblade.archive.entity.ArchiveFormulaConfig;
@@ -18,6 +19,7 @@ import org.springblade.archive.utils.FileUtils;
 import org.springblade.archive.utils.FormulaUtil;
 import org.springblade.business.entity.ArchiveFile;
 import org.springblade.business.feign.ArchiveFileClient;
+import org.springblade.common.constant.OssConstant;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.common.vo.DataVO;
@@ -288,7 +290,8 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
         Map<String, Object> dataInfo = new HashMap<>();
 
         ArchiveFormulaConfig multiLineconfig = null;
-        String fileName = NAME_MAP.get(number)+ "-" + archivesAuto.getId();
+        //采取
+        String fileName = FileUtils.generateFilename(number,0,archivesAuto.getId());
 
         for (ArchiveFormulaConfig config : formulaConfigs) {
             String coords = config.getCoords();
@@ -547,7 +550,7 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
         FileOutputStream outputStream = new FileOutputStream(excelPath);
         workbook.write(outputStream);
         FileUtils.setExcelScaleToPdf(excelPath, pdfPath);
-        BladeFile bladeFile = newIOSSClient.uploadFile(fileName + ".pdf", pdfPath);
+        BladeFile bladeFile = newIOSSClient.uploadFile(fileName + ".pdf", OssConstant.TEMP_DIRECTORY, pdfPath);
 
         String pdfLink = "";
         if (bladeFile!= null ){
@@ -740,7 +743,7 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
      * @param fileName
      * @return
      */
-    public String MergePdfAndUpload(List<String> urlList,String fileName) {
+    public String MergePdfAndUpload(List<String> urlList,String fileName,String filePath) {
        String url = "";
        Long id = SnowFlakeUtil.getId();
        String trialPdf = FileUtils.LocalPath + "/pdf/" + id + ".pdf";
@@ -748,8 +751,15 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
        try {
             //合并pdf
             FileUtils.mergePdfPublicMethods(urlList,trialPdf);
+
+            if (StringUtils.isEmpty(filePath)) {
+                filePath = OssConstant.TEMP_DIRECTORY;
+            }
+
+            fileName += (OssConstant.SEPARATOR + id);
+
             //上传到oss
-            BladeFile file  = newIOSSClient.uploadFile(fileName+ ".pdf",trialPdf);
+            BladeFile file  = newIOSSClient.uploadFile(fileName+ ".pdf", filePath,trialPdf);
             url = file.getLink();
         } catch (Exception e) {
             e.printStackTrace();

+ 2 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -996,6 +996,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		if (fileUrls.size() > 0){
 			//此处暂时这么处理,等oss上传接口里文件名可以区分后,再单独取
 			if (frontUrls != null && frontUrls.length > 3){
+
 				urlList.add(frontUrls[0]);
 				urlList.add(frontUrls[1]);
 			}
@@ -1007,7 +1008,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 				urlList.add(frontUrls[3]);
 			}
 
-			url = archiveAutoPdfService.MergePdfAndUpload(urlList,archivesAuto.getName());
+			url = archiveAutoPdfService.MergePdfAndUpload(urlList,archivesAuto.getName(),null);
 		}
 		return  url;
 	}

+ 23 - 2
blade-service/blade-archive/src/main/java/org/springblade/archive/utils/FileUtils.java

@@ -19,7 +19,9 @@ import org.apache.poi.xssf.usermodel.XSSFPrintSetup;
 import org.apache.poi.xssf.usermodel.XSSFSheet;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
+import org.springblade.common.constant.OssConstant;
 import org.springblade.common.utils.CommonUtil;
+import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.common.vo.DataVO;
 import org.springblade.core.oss.model.BladeFile;
 import org.springblade.core.tool.utils.IoUtil;
@@ -32,6 +34,7 @@ import java.awt.*;
 import java.awt.image.BufferedImage;
 import java.io.*;
 import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -572,11 +575,29 @@ public class FileUtils {
             }
             doc.close();
         }
+    }
 
-
-
+    /**
+     * 生成名字 参考 haha__125645646565.pdf
+     * @param filename
+     * @param style 0则按照雪花算法。1则按照时间戳
+     * @return
+     */
+    public static String generateFilename(String filename, int style,Long fid) {
+        String timestamp = "";
+        if (fid != null ) {
+            timestamp = Long.toString(fid);
+        }
+        else if (style == 0) {
+            timestamp = Long.toString(SnowFlakeUtil.getId());
+        } else if (style == 1) {
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+            timestamp = sdf.format(new Date());
+        }
+        return filename + OssConstant.SEPARATOR + timestamp;
     }
 
+
     public static final  String MAP4_AVI = "avi、wmv、mpeg、mp4、m4v、mov、asf、flv、f4v、rmvb、rm、3gp、vob";
     public static final  String XLS_XLSX = "xlsx、xls";
     public static final  String DOC_DOCX = "doc、docx";