Преглед на файлове

图书详情和预约用户列表

преди 5 години
родител
ревизия
dc87088ef9

+ 48 - 15
bms/src/main/java/com/hssx/bms/service/impl/BookPageServiceImpl.java

@@ -8,17 +8,21 @@ import com.hssx.bms.mapper.BookCategoryMapper;
 import com.hssx.bms.mapper.BookPageMapper;
 import com.hssx.bms.service.BookPageService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.hssx.bms.until.FileCopyToFolderUtil;
 import com.hssx.bms.until.HttpRespMsg;
 import com.hssx.bms.until.UploadFileToFileNameUtil;
 import net.lingala.zip4j.core.ZipFile;
 import net.lingala.zip4j.exception.ZipException;
 import net.lingala.zip4j.model.FileHeader;
+import org.apache.ibatis.scripting.xmltags.DynamicSqlSource;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -49,12 +53,14 @@ public class BookPageServiceImpl extends ServiceImpl<BookPageMapper, BookPage> i
                 Unzip4j1(filePath,path+bookPage.getBookId(),bookPage);
             } catch (ZipException e) {
                 e.printStackTrace();
+            } catch (IOException e) {
+                e.printStackTrace();
             }
         }
         return msg;
     }
     // 解压方法2
-    public void Unzip4j1(String zipFile,String folderPath,BookPage bookPage) throws ZipException {
+    public void Unzip4j1(String zipFile,String folderPath,BookPage bookPage) throws ZipException, IOException {
         long startTime = System.currentTimeMillis();
         File folder = new File(folderPath);
         deleteDir(folder);
@@ -67,26 +73,53 @@ public class BookPageServiceImpl extends ServiceImpl<BookPageMapper, BookPage> i
         //检查是否需要密码
 //        checkEncrypted(zipFile2);
         List<FileHeader> fileHeaderList = zipFile2.getFileHeaders();
-        for (int i = 0; i < fileHeaderList.size(); i++) {
-            FileHeader fileHeader = fileHeaderList.get(i);
-            if(!fileHeader.isDirectory()){
+        boolean iscontain=false;
+        String destInfolder = "";
+//        for (FileHeader fileHeader : fileHeaderList) {
+//            System.out.println(fileHeader.getFileName());
+//            System.out.println(fileHeader.getFileName().indexOf("/"));
+//            System.out.println(destInfolder.substring(0,fileHeader.getFileName().indexOf("/")-1));
+//        }
+        for (FileHeader fileHeader : fileHeaderList) {
+            if(fileHeader.getFileName().indexOf("/")!=-1){
+                iscontain = true;
+                destInfolder = fileHeader.getFileName().substring(0,fileHeader.getFileName().indexOf("/"));
+                break;
+            }
+        }
+        if(iscontain){
+            //有文件夹
+            List<String> fileList = new ArrayList<>();
+            for (int i = 0; i < fileHeaderList.size(); i++) {
+                FileHeader fileHeader = fileHeaderList.get(i);
+                if(i>0){
+                    fileList.add(folderPath+File.separator+fileHeader.getFileName());
+                    System.out.println(destInfolder);
+                    String  fileName = fileHeader.getFileName().substring(destInfolder.length()+1);
+                    System.out.println(fileName);
+                    bookPage.setFile(fileName);
+                    Integer pageNum = Integer.parseInt(fileName.substring(0,fileName.indexOf(".")));
+                    bookPage.setPageNum(pageNum);
+                    bookPageMapper.insert(bookPage);
+                }
+                zipFile2.extractFile(fileHeader, folderPath);
+            }
+            if(fileList.size()>0){
+                System.out.println(fileList);
+                System.out.println(folderPath);
+                 FileCopyToFolderUtil.copy(fileList, folderPath);
+                File oldFolder = new File(folderPath+File.separator+destInfolder);
+                deleteDir(oldFolder);
+            }
+        }else{
+            for (int i = 0; i < fileHeaderList.size(); i++) {
+                FileHeader fileHeader = fileHeaderList.get(i);
                 bookPage.setFile(fileHeader.getFileName());
                 Integer pageNum = Integer.parseInt(fileHeader.getFileName().substring(0,fileHeader.getFileName().indexOf(".")));
                 bookPage.setPageNum(pageNum);
                 bookPageMapper.insert(bookPage);
                 zipFile2.extractFile(fileHeader, folderPath);
-            }else{
-                zipFile2.extractFile(fileHeader, folderPath);
-                File destFolder = new File(folderPath);
-                File[] files = destFolder.listFiles();
-                for (File file : files) {
-                    bookPage.setFile(fileHeader.getFileName());
-                    Integer pageNum = Integer.parseInt(file.getName().substring(0,file.getName().indexOf(".")));
-                    bookPage.setPageNum(pageNum);
-                    bookPageMapper.insert(bookPage);
-                }
             }
-
         }
         System.out.println("解压成功!");
         long endTime = System.currentTimeMillis();

+ 72 - 0
bms/src/main/java/com/hssx/bms/until/FileCopyToFolderUtil.java

@@ -0,0 +1,72 @@
+package com.hssx.bms.until;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Author: 吴涛涛 cuiyi@itany.com
+ * Date : 2019 - 08 - 30 13:59
+ * Description:<描述>
+ * Version: 1.0
+ */
+public class FileCopyToFolderUtil {
+    public static void main(String[] args) throws IOException {
+        Date date = new Date();
+        long time1 = date.getTime();
+        List<String>  sourceFileUrls = new ArrayList<>();
+        sourceFileUrls.add("D:\\软件\\ideaIU-2018.1.5.exe");
+        copy(sourceFileUrls, "D:\\775");
+        date = new Date();
+        long time2 = date.getTime();
+        System.out.println("耗时===》"+(time2-time1)/1000);
+        File file = new File("D:\\776");
+        if (file.exists()) {
+            file.delete();
+            //创建文件夹
+            file.mkdirs();
+        } else {
+            file.mkdirs();
+        }
+        System.out.println(file.getPath());
+    }
+    public static String copy(List<String>  sourceFileUrls, String destinationFolder) throws IOException {
+        //新文件夾
+        File file = new File(destinationFolder);
+        if (file.exists()) {
+            file.delete();
+            //创建文件夹
+            file.mkdirs();
+        } else {
+            file.mkdirs();
+        }
+        //如果源文件存在就复制
+        for (String sourceFileUrl : sourceFileUrls) {
+            //目标源文件夹
+            File source = new File(sourceFileUrl);
+            if (source.exists()) {
+                //新文件夹的路径
+                File newFile = new File(file + File.separator + source.getName());
+                if (source.isFile()) {
+                    FileInputStream in = new FileInputStream(source);
+                    BufferedInputStream bis= new BufferedInputStream(in);
+                    FileOutputStream out = new FileOutputStream(newFile);
+                    BufferedOutputStream bos= new BufferedOutputStream(out);
+                    byte[] bs = new byte[4096*10];
+                    int count = 0;
+//循环把源文件的内容写入新文件
+                    while ((count = bis.read(bs, 0, bs.length)) != -1) {
+                        bos.write(bs, 0, count);
+                    }
+//关闭流
+                    out.flush();
+                    out.close();
+                    in.close();
+                }
+            }
+        }
+        return file.getPath();
+    }
+
+}

+ 179 - 0
bms/src/main/java/com/hssx/bms/until/ZipUtils.java

@@ -0,0 +1,179 @@
+package com.hssx.bms.until;
+
+import net.lingala.zip4j.core.ZipFile;
+import net.lingala.zip4j.exception.ZipException;
+import net.lingala.zip4j.model.FileHeader;
+import net.lingala.zip4j.model.ZipParameters;
+import net.lingala.zip4j.util.Zip4jConstants;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Author: 吴涛涛 cuiyi@itany.com
+ * Date : 2019 - 11 - 12 12:50
+ * Description:<描述>
+ * Version: 1.0
+ */
+public class ZipUtils {
+
+    /**
+     * 根据给定密码压缩文件(s)到指定目录
+     *
+     * @param destFileName 压缩文件存放绝对路径 e.g.:D:/upload/zip/demo.zip
+     * @param passwd 密码(可为空)
+     * @param files 单个文件或文件数组
+     * @return 最终的压缩文件存放的绝对路径,如果为null则说明压缩失败.
+     */
+    public static String compress(String destFileName, String passwd, File... files) {
+        ZipParameters parameters = new ZipParameters();
+        parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); // 压缩方式
+        parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); // 压缩级别
+        if (!StringUtils.isEmpty(passwd)) {
+            parameters.setEncryptFiles(true);
+            parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD); // 加密方式
+            parameters.setPassword(passwd.toCharArray());
+        }
+        try {
+            ZipFile zipFile = new ZipFile(destFileName);
+            for (File file : files) {
+                zipFile.addFile(file, parameters);
+            }
+            return destFileName;
+        } catch (ZipException e) {
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+
+    /**
+     * 根据给定密码压缩文件(s)到指定位置
+     *
+     * @param destFileName 压缩文件存放绝对路径 e.g.:D:/upload/zip/demo.zip
+     * @param passwd 密码(可为空)
+     * @param filePaths 单个文件路径或文件路径数组
+     * @return 最终的压缩文件存放的绝对路径,如果为null则说明压缩失败.
+     */
+    public static String compress(String destFileName, String passwd, String... filePaths) {
+        int size = filePaths.length;
+        File[] files = new File[size];
+        for (int i = 0; i < size; i++) {
+            files[i] = new File(filePaths[i]);
+        }
+        return compress(destFileName, passwd, files);
+    }
+
+    /**
+     * 根据给定密码压缩文件(s)到指定位置
+     *
+     * @param destFileName 压缩文件存放绝对路径 e.g.:D:/upload/zip/demo.zip
+     * @param passwd 密码(可为空)
+     * @param folder 文件夹路径
+     * @return 最终的压缩文件存放的绝对路径,如果为null则说明压缩失败.
+     */
+    public static String compressFolder(String destFileName, String passwd, String folder) {
+        File folderParam = new File(folder);
+        if (folderParam.isDirectory()) {
+            File[] files = folderParam.listFiles();
+            return compress(destFileName, passwd, files);
+        }
+        return null;
+    }
+
+    /**
+     * 根据所给密码解压zip压缩包到指定目录
+     * <p>
+     * 如果指定目录不存在,可以自动创建,不合法的路径将导致异常被抛出
+     *
+     * @param zipFile zip压缩包绝对路径
+     * @param dest 指定解压文件夹位置
+     * @param passwd 密码(可为空)
+     * @return 解压后的文件数组
+     * @throws ZipException
+     */
+    @SuppressWarnings("unchecked")
+    public static File[] deCompress(File zipFile, String dest, String passwd) throws ZipException {
+        //1.判断指定目录是否存在
+        File destDir = new File(dest);
+        if (destDir.isDirectory() && !destDir.exists()) {
+            destDir.mkdir();
+        }
+        //2.初始化zip工具
+        ZipFile zFile = new ZipFile(zipFile);
+        zFile.setFileNameCharset("GBK");
+        if (!zFile.isValidZipFile()) {
+            throw new ZipException("压缩文件不合法,可能被损坏.");
+        }
+        //3.判断是否已加密
+        if (zFile.isEncrypted()) {
+            zFile.setPassword(passwd.toCharArray());
+        }
+        //4.解压所有文件
+        zFile.extractAll(dest);
+        List<FileHeader> headerList = zFile.getFileHeaders();
+        List<File> extractedFileList = new ArrayList<File>();
+        for(FileHeader fileHeader : headerList) {
+            if (!fileHeader.isDirectory()) {
+                extractedFileList.add(new File(destDir,fileHeader.getFileName()));
+            }
+        }
+        File [] extractedFiles = new File[extractedFileList.size()];
+        extractedFileList.toArray(extractedFiles);
+        return extractedFiles;
+    }
+    /**
+     * 解压无密码的zip压缩包到指定目录
+     * @param zipFile zip压缩包
+     * @param dest 指定解压文件夹位置
+     * @return 解压后的文件数组
+     * @throws ZipException
+     */
+    public static File[] deCompress(File zipFile, String dest){
+        try {
+            return deCompress(zipFile, dest, null);
+        } catch (ZipException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+    /**
+     * 根据所给密码解压zip压缩包到指定目录
+     * @param zipFilePath zip压缩包绝对路径
+     * @param dest 指定解压文件夹位置
+     * @param passwd 压缩包密码
+     * @return 解压后的所有文件数组
+     */
+    public static File[] deCompress(String zipFilePath, String dest, String passwd){
+        try {
+            return deCompress(new File(zipFilePath), dest, passwd);
+        } catch (ZipException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+    /**
+     * 无密码解压压缩包到指定目录
+     * @param zipFilePath zip压缩包绝对路径
+     * @param dest 指定解压文件夹位置
+     * @return 解压后的所有文件数组
+     */
+    public static File[] deCompress(String zipFilePath, String dest){
+        try {
+            return deCompress(new File(zipFilePath), dest, null);
+        } catch (ZipException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public static void main(String[] args) {
+//		String folder = "D:\\upload\\backup\\down\\dezip\\";
+//		compress("D:/upload/zip/测试.zip", "123456", folder);
+
+        deCompress("D:/工业.zip", "D:/upload/111", null);
+
+    }
+}

+ 1 - 1
bms/src/main/resources/application-prod.properties

@@ -1,6 +1,6 @@
 # ####################################################################################################
 # ·þÎñ¶ËÅäÖÃ
-server.port=9094
+server.port=9092
 server.servlet.context-path=/
 server.tomcat.uri-encoding=UTF-8
 server.tomcat.max-http-post-size=-1