From 03abc40237d5facd7a24628ed6afe0a014b49e1b Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期二, 11 十月 2022 18:06:24 +0800
Subject: [PATCH] 1

---
 src/main/java/com/lf/server/service/all/FileService.java |   78 +++++++++++++++++++++++++++++++++++++--
 1 files changed, 74 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/lf/server/service/all/FileService.java b/src/main/java/com/lf/server/service/all/FileService.java
index 6e26b23..e653552 100644
--- a/src/main/java/com/lf/server/service/all/FileService.java
+++ b/src/main/java/com/lf/server/service/all/FileService.java
@@ -1,12 +1,16 @@
 package com.lf.server.service.all;
 
+import com.alibaba.fastjson.JSON;
 import com.lf.server.controller.all.BaseController;
+import com.lf.server.entity.all.HttpStatus;
 import com.lf.server.entity.all.ResponseMsg;
 import com.lf.server.entity.sys.AttachEntity;
 import com.lf.server.entity.sys.UserEntity;
+import com.lf.server.helper.FileHelper;
 import com.lf.server.helper.PathHelper;
+import com.lf.server.helper.StringHelper;
+import com.lf.server.helper.WebHelper;
 import com.lf.server.service.sys.AttachService;
-import com.sun.xml.internal.fastinfoset.tools.XML_SAX_StAX_FI;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -19,11 +23,13 @@
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.ServletContext;
+import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
+import java.net.URLEncoder;
 import java.util.List;
 import java.util.UUID;
 
@@ -43,6 +49,11 @@
 
     private final static Log log = LogFactory.getLog(FileService.class);
 
+    private static final String NO_FILE = JSON.toJSONString(new ResponseMsg<String>(HttpStatus.NOT_FOUND, "鏂囦欢鎵句笉鍒�"));
+
+    /**
+     * 涓婁紶鏂囦欢
+     */
     public ResponseMsg<String> upload(UserEntity ue, String tab, MultipartFile file, BaseController ctrl) {
         try {
             if (file == null && file.isEmpty()) {
@@ -66,11 +77,10 @@
                 return ctrl.success("鏂囦欢宸插瓨鍦�", md5);
             }
 
-            String uploadPath = pathHelper.getUploadFullPath();
-            String targetPath = uploadPath + File.separator + md5;
+            AttachEntity ae = getAttachEntity(ue, tab, oldName, md5);
+            String targetPath = pathHelper.getConfig().getUploadPath() + File.separator + ae.getPath();
             newFile.renameTo(new File(targetPath));
 
-            AttachEntity ae = getAttachEntity(ue, tab, oldName, md5);
             int rows = attachService.insert(ae);
 
             return rows > 0 ? ctrl.success(md5) : ctrl.fail("淇濆瓨鏂囦欢澶辫触", null);
@@ -102,6 +112,66 @@
     }
 
     /**
+     * 涓嬭浇鏂囦欢
+     */
+    public void download(String guid, HttpServletRequest req, HttpServletResponse res, BaseController ctrl) {
+        try {
+            if (StringHelper.isEmpty(guid)) {
+                WebHelper.write2Page(res, NO_FILE);
+                return;
+            }
+
+            AttachEntity entity = attachService.selectByGuid(guid);
+            if (entity == null) {
+                WebHelper.write2Page(res, NO_FILE);
+                return;
+            }
+
+            setDownloadResponse(entity, res);
+            String filePath = pathHelper.getConfig().getUploadPath() + File.separator + entity.getPath();
+
+            // 閫氳繃response瀵硅薄锛岃幏鍙栧埌杈撳嚭娴�
+            ServletOutputStream outputStream = res.getOutputStream();
+            // 瀹氫箟杈撳叆娴侊紝閫氳繃杈撳叆娴佽鍙栨枃浠跺唴瀹�
+            FileInputStream fileInputStream = new FileInputStream(filePath);
+
+            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();
+        } catch (Exception ex) {
+            try {
+                String msg = JSON.toJSONString(new ResponseMsg<String>(HttpStatus.ERROR, "鏂囦欢涓嬭浇鍑洪敊"));
+                WebHelper.write2Page(res, msg);
+            } catch (Exception e) {
+                log.error(e.getMessage() + e.getStackTrace() + "\n");
+            }
+            log.error(ex.getMessage() + ex.getStackTrace() + "\n");
+        }
+    }
+
+    private void setDownloadResponse(AttachEntity entity, HttpServletResponse res) throws IOException {
+        String fileName = URLEncoder.encode(entity.getName(), "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(entity.getName());
+        String mime = FileHelper.getMime(ext);
+        res.setContentType(mime);
+    }
+
+    /**
      * 涓婁紶鏂囦欢
      *
      * @param req

--
Gitblit v1.9.3