瀏覽代碼

Merge branch 'master' of http://47.100.37.243:10080/ZHOU/yunsu

# Conflicts:
#	cloud-model/src/main/java/com/hssx/cloudmodel/service/impl/MouldFileServiceImpl.java
5 年之前
父節點
當前提交
6748e6531c
共有 1 個文件被更改,包括 64 次插入2 次删除
  1. 64 2
      cloud-model/src/main/java/com/hssx/cloudmodel/service/impl/MouldFileServiceImpl.java

+ 64 - 2
cloud-model/src/main/java/com/hssx/cloudmodel/service/impl/MouldFileServiceImpl.java

@@ -554,7 +554,7 @@ public class MouldFileServiceImpl extends ServiceImpl<MouldFileMapper, MouldFile
                 }else{
                      mouldFiles = mouldFileMapper.selectList(new QueryWrapper<MouldFile>().eq("model_id", id).eq("state", 3).eq("blong_type",3));
                 }
-                feedBackDirectMultiDownload(request, response, downloadPath, mould, mouldFiles, path);
+                this.download(request, response, downloadPath, mould, mouldFiles, path);
             }
         }
         return msg;
@@ -703,7 +703,6 @@ public class MouldFileServiceImpl extends ServiceImpl<MouldFileMapper, MouldFile
             }
             //下载时间
 
-
             rowList.add(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(dynamic.getIndate())
             );
             list.add(rowList);
@@ -735,6 +734,69 @@ public class MouldFileServiceImpl extends ServiceImpl<MouldFileMapper, MouldFile
         return msg;
     }
 
+    public void download(HttpServletRequest request, HttpServletResponse response, String downloadPath, Mould vo, List<MouldFile> mouldFiles, String oldFilePath){
+        //响应头的设置
+        response.reset();
+        response.setCharacterEncoding("utf-8");
+        response.setContentType("multipart/form-data");
+
+        //设置压缩包的名字
+        //解决不同浏览器压缩包名字含有中文时乱码的问题
+        String downloadName = vo.getModelNo() + vo.getModelName()+".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) {
+            e.printStackTrace();
+        }
+
+        //循环将文件写入压缩流
+        DataOutputStream os = null;
+        if(mouldFiles.size()>0){
+            for(int i = 0; i < mouldFiles.size(); i++ ){
+                File file = new File(mouldFiles.get(i).getFileUrl());
+                try {
+                    //添加ZipEntry,并ZipEntry中写入文件流
+                    //这里,加上i是防止要下载的文件有重名的导致下载失败
+                    zipos.putNextEntry(new ZipEntry(mouldFiles.get(i).getFileName()));
+                    os = new DataOutputStream(zipos);
+                    InputStream is = new FileInputStream(file);
+                    byte[] b = new byte[100];
+                    int length = 0;
+                    while((length = is.read(b))!= -1){
+                        os.write(b, 0, length);
+                    }
+                    is.close();
+                    zipos.closeEntry();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        //关闭流
+        try {
+            os.flush();
+            os.close();
+            zipos.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+    }
 
     public Map<String, Object> feedBackDirectMultiDownload(HttpServletRequest request, HttpServletResponse response, String downloadPath, Mould vo, List<MouldFile> mouldFiles, String oldFilePath) throws IOException {
         //压缩文件初始设置