Alan
2021-02-19 7e172d1de04d55caafd86489fa81c06c142adab2
febs-common/febs-common-core/src/main/java/cc/mrbird/febs/common/core/utils/MyUtil.java
New file
@@ -0,0 +1,129 @@
package cc.mrbird.febs.common.core.utils;
import cc.mrbird.febs.common.core.exception.FebsException;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Dict;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.Date;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@Slf4j
public class MyUtil {
    public static void downloadFile(File file, HttpServletResponse response) throws IOException {
        try (InputStream fin = new FileInputStream(file); ServletOutputStream out = response.getOutputStream()) {
            response.setCharacterEncoding("utf-8");
            response.setContentType("application/x-download");
            response.addHeader("Content-Disposition", "attachment;filename=resume.doc");
            byte[] buffer = new byte[1024];
            int bytesToRead = -1;
            // 通过循环将读入的Word文件的内容输出到浏览器中
            while ((bytesToRead = fin.read(buffer)) != -1) {
                out.write(buffer, 0, bytesToRead);
            }
        } catch (Exception e) {
            log.error("下载文件异常" + e);
            e.printStackTrace();
        }
    }
    public static void  download(HttpServletRequest request, HttpServletResponse response, List<File> files , List<String> fileName){
        //设置压缩包的名字
        //解决不同浏览器压缩包名字含有中文时乱码的问题
        String downloadName ="PersonnelInformation-" + DateUtil.format(new Date(), "yyyyMMddhhmmsss") + ".zip";
        String agent = request.getHeader("USER-AGENT");
        try {
            if (agent.contains("MSIE") || agent.contains("Trident")) {
                downloadName = java.net.URLEncoder.encode(downloadName, "UTF-8");
            } else {
                downloadName = new String(downloadName.getBytes("UTF-8"), "ISO-8859-1");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        response.setHeader("Content-Disposition", "attachment;fileName=\"" + downloadName + "\"");
        //设置压缩流:直接写入response,实现边压缩边下载
        ZipOutputStream zipos = null;
        try {
            zipos = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
            //设置压缩方法
            zipos.setMethod(ZipOutputStream.DEFLATED);
        } catch (Exception e) {
            log.error("设置压缩流出现异常" + e);
            e.printStackTrace();
        }
        //循环将文件写入压缩流
        DataOutputStream os = null;
        for (int i = 0; i < files.size(); i++) {
            File file = files.get(i);
            try {
                //添加ZipEntry,并ZipEntry中写入文件流
                //这里,加上i是防止要下载的文件有重名的导致下载失败
                zipos.putNextEntry(new ZipEntry(fileName.get(i)));
                os = new DataOutputStream(zipos);
                InputStream is = new FileInputStream(file);
                byte[] b = new byte[100];
                int length;
                while ((length = is.read(b)) != -1) {
                    os.write(b, 0, length);
                }
                is.close();
                zipos.closeEntry();
            } catch (IOException e) {
                log.error("循环将文件写入压缩流出现异常" + e.getMessage());
                e.printStackTrace();
            }
        }
        //关闭流
        try {
            os.flush();
            os.close();
            zipos.close();
        } catch (IOException e) {
            log.error("关闭流现异常" + e.getMessage());
            e.printStackTrace();
        }
    }
    public static Dict filesUpload(MultipartFile file, String uploadPpath, String nextIdStr) throws FebsException, IOException {
        if (file.isEmpty()) {
            throw new FebsException("上传的文件不能为空!请重新上传");
        }
        if (file.getSize() <= 0) {
            throw new FebsException("上传的文件大小需要大于0kb");
        }
        if (file.getSize() > 50 * 1024* 1024) {
            throw new FebsException("上传的文件大于50M");
        }
        if (!FileUtil.exist(uploadPpath)) {
            FileUtil.mkdir(uploadPpath);
        }
        //原本名字
        String fileName = file.getOriginalFilename();
        String suffix = "";
        if (fileName.indexOf(".") > 0) {
            //后缀
            suffix = fileName.substring(fileName.indexOf("."), fileName.length());
        }
        //生成新的名字
        String newName = nextIdStr + suffix;
        //上传
        file.transferTo(new File(uploadPpath + newName));
        return Dict.create().set("fileName",fileName).set("suffix",suffix).set("newName",newName);
    }
}