From 5fe2473ba0e9f374da27e919fdce09b0915f5e51 Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期一, 31 十月 2022 20:21:56 +0800
Subject: [PATCH] 1

---
 src/main/java/com/lf/server/service/show/MarkService.java |   70 ++++++++++++++++++++++++++++++----
 1 files changed, 61 insertions(+), 9 deletions(-)

diff --git a/src/main/java/com/lf/server/service/show/MarkService.java b/src/main/java/com/lf/server/service/show/MarkService.java
index d54f484..1472688 100644
--- a/src/main/java/com/lf/server/service/show/MarkService.java
+++ b/src/main/java/com/lf/server/service/show/MarkService.java
@@ -1,12 +1,10 @@
 package com.lf.server.service.show;
 
+import com.lf.server.entity.all.HttpStatus;
 import com.lf.server.entity.ctrl.MarkJsonEntity;
 import com.lf.server.entity.show.MarkEntity;
 import com.lf.server.entity.sys.UserEntity;
-import com.lf.server.helper.GdalHelper;
-import com.lf.server.helper.PathHelper;
-import com.lf.server.helper.StringHelper;
-import com.lf.server.helper.WebHelper;
+import com.lf.server.helper.*;
 import com.lf.server.mapper.show.MarkMapper;
 import com.lf.server.service.data.UploaderService;
 import org.apache.commons.logging.Log;
@@ -15,9 +13,12 @@
 import org.springframework.stereotype.Service;
 import org.springframework.web.bind.annotation.RequestBody;
 
+import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.File;
+import java.io.FileInputStream;
+import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Random;
@@ -84,8 +85,9 @@
         return markMapper.updates(list);
     }
 
-    public void downloadShp(UserEntity ue, List<MarkJsonEntity> list, HttpServletRequest req, HttpServletResponse res) {
-        String path = getShpDir(ue);
+    public void downloadShp(UserEntity ue, List<MarkJsonEntity> list, HttpServletRequest req, HttpServletResponse res) throws Exception {
+        String parent = pathHelper.getTempPath(ue.getId());
+        String path = getShpDir(ue, parent);
 
         List<MarkJsonEntity> points = getMarkByType(list, "POINT");
         if (points.size() > 0) {
@@ -100,11 +102,19 @@
             String polygonFile = GdalHelper.createShp(polygons, path, "POLYGON");
         }
 
-        //
+        File[] files = new File(path).listFiles();
+        if (files == null || files.length == 0) {
+            WebHelper.write2Page(res, WebHelper.getErrJson(HttpStatus.BAD_REQUEST, "Shp鏂囦欢鐢熸垚澶辫触"));
+            return;
+        }
+
+        String zip = getZip(parent);
+        ZipHelper.zip(zip, parent);
+        download(res, zip);
     }
 
-    private String getShpDir(UserEntity ue) {
-        String path = pathHelper.getTempPath(ue.getId()) + File.separator + WebHelper.getRandomInt(100000, 1000000);
+    private String getShpDir(UserEntity ue, String parent) {
+        String path = parent + File.separator + WebHelper.getRandomInt(100000, 1000000);
 
         File file = new File(path);
         if (!file.exists() && !file.isDirectory()) {
@@ -127,4 +137,46 @@
 
         return rs;
     }
+
+    private String getZip(String parent) {
+        String path = parent + File.separator + WebHelper.getRandomInt(100000, 1000000) + ".zip";
+
+        File file = new File(path);
+        if (file.exists() && !file.isDirectory()) {
+            file.delete();
+        }
+
+        return path;
+    }
+
+    private void download(HttpServletResponse res, String file) throws Exception {
+        String fileName = URLEncoder.encode(FileHelper.getFileName(file), "UTF-8");
+
+        // 璁剧疆鍝嶅簲澶翠腑鏂囦欢鐨勪笅杞芥柟寮忎负闄勪欢鏂瑰紡锛屼互鍙婅缃枃浠跺悕
+        res.setHeader("Content-Disposition", "attachment; filename=" + fileName);
+        // 璁剧疆鍝嶅簲澶寸殑缂栫爜鏍煎紡涓篣TF-8
+        res.setCharacterEncoding("UTF-8");
+
+        // 閫氳繃response瀵硅薄璁剧疆鍝嶅簲鏁版嵁鏍煎紡(濡傦細"text/plain; charset=utf-8")
+        String ext = FileHelper.getExtension(file);
+        String mime = FileHelper.getMime(ext);
+        res.setContentType(mime);
+
+        // 閫氳繃response瀵硅薄锛岃幏鍙栧埌杈撳嚭娴�
+        ServletOutputStream outputStream = res.getOutputStream();
+        // 瀹氫箟杈撳叆娴侊紝閫氳繃杈撳叆娴佽鍙栨枃浠跺唴瀹�
+        FileInputStream fileInputStream = new FileInputStream(file);
+
+        int len = 0;
+        byte[] bytes = new byte[1024];
+        while ((len = fileInputStream.read(bytes)) != -1) {
+            // 閫氳繃杈撳叆娴佽鍙栨枃浠舵暟鎹紝鐒跺悗閫氳繃涓婅堪鐨勮緭鍑烘祦鍐欏洖娴忚鍣�
+            outputStream.write(bytes, 0, len);
+            outputStream.flush();
+        }
+
+        // 鍏抽棴璧勬簮
+        outputStream.close();
+        fileInputStream.close();
+    }
 }

--
Gitblit v1.9.3