| New file |
| | |
| | | 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); |
| | | |
| | | } |
| | | } |