Browse Source

fix: 党务工作资源库去除pdf文件限制

zhangying 1 day ago
parent
commit
57122c597d

+ 18 - 1
lib/数据更新脚本.txt

@@ -641,6 +641,23 @@ INSERT INTO `cf_dictionary` (`DICTIONARYID`, `DICKEY`, `DICVALUE`, `DICTYPEKEY`,
 INSERT INTO `cf_dictionary` (`DICTIONARYID`, `DICKEY`, `DICVALUE`, `DICTYPEKEY`, `DICTYPE`, `APPLICATIONID`, `DICNOTE`, `OPERATETIME`, `OPERATESTATE`, `SYNCSTATE`) VALUES ('007233a7-8d6e-4c31-0004-410323984d7e', 4, '预备党员', 'ssflType', 2, 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', NULL, '2022-04-01 15:45:10', 'a', 'n');
 INSERT INTO `cf_dictionary` (`DICTIONARYID`, `DICKEY`, `DICVALUE`, `DICTYPEKEY`, `DICTYPE`, `APPLICATIONID`, `DICNOTE`, `OPERATETIME`, `OPERATESTATE`, `SYNCSTATE`) VALUES ('007233a7-8d6e-4c31-0005-410323984d7e', 5, '正式党员', 'ssflType', 2, 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', NULL, '2022-04-01 15:45:10', 'a', 'n');
 
-
+-- 2025-03-20 学习资料库外键设置错误
+ALTER TABLE dj_workresourcelibrary DROP FOREIGN KEY dj_workresourcelibrary_ibfk_1;
+ALTER TABLE dj_workresourcelibrary
+ADD CONSTRAINT dj_workresourcelibrary_ibfk_1
+FOREIGN KEY (FILETYPEID) REFERENCES dj_workresourcelibrarytype(FILETYPEID);
+
+-- 2025-03-27 核查人员角色
+INSERT INTO `cf_roles` VALUES ('27f0fd61-3107-486f-9240-4f9ef909103e', 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', '核查人员', '核查人员', 'A', 99, '73ad65f3-b95c-4cc9-9dc9-667683d19f34');
+INSERT INTO `cf_menu_role` VALUES ('a2640551-3b11-484b-9420-4376641a760c', '27f0fd61-3107-486f-9240-4f9ef909103e');
+INSERT INTO `cf_menu_role` VALUES ('f237844c-2194-430f-bef7-ea68469c9f33', '27f0fd61-3107-486f-9240-4f9ef909103e');
+INSERT INTO `cf_menu_role` VALUES ('f237844c-4494-430f-bef7-ea68469c9f33', '27f0fd61-3107-486f-9240-4f9ef909103e');
+INSERT INTO `cf_menu_role` VALUES ('f237844c-5594-430f-bef7-ea68469c9f33', '27f0fd61-3107-486f-9240-4f9ef909103e');
+INSERT INTO `cf_menu_role` VALUES ('f237844c-6694-430f-bef7-ea68469c9f33', '27f0fd61-3107-486f-9240-4f9ef909103e');
+
+-- 2025-03-28 考核材料按钮权限
+INSERT INTO `cf_menu` VALUES ('10a57810-b11a-4f00-a983-57a2d907c777', 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', 'f237844c-5594-430f-bef7-ea68469c9f33', NULL, 1, 'checkData.btnAdd', '新增', NULL, NULL, NULL, 0, 1, NULL);
+INSERT INTO `cf_menu` VALUES ('10a57810-b11a-4f00-a983-57a2d907c778', 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', 'f237844c-5594-430f-bef7-ea68469c9f33', NULL, 1, 'checkData.btnEdit', '编辑', NULL, NULL, NULL, 0, 1, NULL);
+INSERT INTO `cf_menu` VALUES ('10a57810-b11a-4f00-a983-57a2d907c779', 'f0c4fa7f9f3c4fb6bd56aac608b7ad3f', 'f237844c-5594-430f-bef7-ea68469c9f33', NULL, 1, 'checkData.btnDel', '删除', NULL, NULL, NULL, 0, 1, NULL);
 
 

+ 37 - 35
src/main/java/com/ghsc/partybuild/controller/workresourcelibrary/WorkResourceLibraryController.java

@@ -18,6 +18,8 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -26,6 +28,7 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -85,7 +88,7 @@ public class WorkResourceLibraryController {
         RequsetData<String> result = new RequsetData<>();
         model.setCreatedatetime(new Date());
         model.setFileurl(model.getFileid());
-        model.setExtendedname(".pdf");
+        // model.setExtendedname(".pdf");
         result = workResourceLibraryService.saveFile(model, userService.getLoginUser().getUserid());
 
         return result;
@@ -230,12 +233,12 @@ public class WorkResourceLibraryController {
             String fileExt=fileName.substring(fileName.lastIndexOf(".")).toLowerCase();
 
             if(!appConfig.safeExts.contains(fileExt)){
-                res.setSuccess(false);
-                res.setMsg("上传失败:只能是pdf文件!");
-                return res;
+                // res.setSuccess(false);
+                // res.setMsg("上传失败:只能是pdf文件!");
+                // return res;
             }
 
-            Path pFileName = Paths.get(appConfig.fileMgrUrl, fileId+".pdf");
+            Path pFileName = Paths.get(appConfig.fileMgrUrl, fileId+fileExt);
             if(Files.exists(pFileName)){
                 Files.delete(pFileName);
             }
@@ -253,39 +256,38 @@ public class WorkResourceLibraryController {
 
     @RequestMapping({"/downDoc/{fileId}"})
     @ResponseBody
-    public String downDoc(HttpServletResponse response, HttpServletRequest request, @PathVariable("fileId") String fileId) {
-
+    public ResponseEntity<String> downDoc(
+            HttpServletResponse response,
+            HttpServletRequest request,
+            @PathVariable("fileId") String fileId) {
         DjWorkresourcelibrary file = workResourceLibraryService.getFileInfo(fileId);
-        if (file != null) {
-            Path pFileName = Paths.get(appConfig.fileMgrUrl, file.getFileurl() + file.getExtendedname());
-            try {
-                if (Files.exists(pFileName)) {
-                    response.setContentType("application/force-download");// 设置强制下载不打开
-                    response.setContentType("multipart/form-data;charset=UTF-8");
-
-                    String fileName = file.getFilename() + file.getExtendedname();
-                    String downloadFileName;
-                    String agent = request.getHeader("USER-AGENT");
-                    if (agent != null && agent.toLowerCase().indexOf("firefox") > 0) {
-                        downloadFileName = "=?UTF-8?B?" + (new String(Base64.getEncoder().encodeToString(fileName.getBytes("UTF-8")))) + "?=";
-                    } else {
-                        downloadFileName = URLEncoder.encode(fileName, "UTF-8");
-                    }
-
-                    response.addHeader("Content-Disposition",
-                            "attachment;fileName=" + downloadFileName);// 设置文件名
-
-
-                    OutputStream os = response.getOutputStream();
-                    Files.copy(pFileName, os);
-                }
-
-            } catch (Exception ex) {
-                fileId = ex.getMessage();
-                logger.info("downDoc:" + ex.getMessage());
+        if (file == null) {
+            return ResponseEntity.status(HttpStatus.NOT_FOUND).body("文件不存在");
+        }
+        Path pFileName = Paths.get(appConfig.fileMgrUrl, file.getFileurl() + file.getExtendedname());
+        if (!Files.exists(pFileName)) {
+            return ResponseEntity.status(HttpStatus.NOT_FOUND).body("未查找到此文件");
+        }
+        try {
+            // 关键修复1: 根据文件扩展名动态识别 MIME 类型
+            String mimeType = Files.probeContentType(pFileName);
+            if (mimeType == null) {
+                mimeType = "application/octet-stream"; // 默认二进制流类型(强制下载)
             }
+            response.setContentType(mimeType);
+            // 关键修复2: 标准化的文件名编码处理
+            String fileName = file.getFilename() + file.getExtendedname();
+            String encodedFileName = URLEncoder.encode(fileName, String.valueOf(StandardCharsets.UTF_8)).replace("+", "%20");
+            String contentDisposition = String.format("attachment; filename=\"%s\"; filename*=UTF-8''%s",
+                    encodedFileName, encodedFileName);
+            response.setHeader("Content-Disposition", contentDisposition);
+            // 流式写入响应内容
+            Files.copy(pFileName, response.getOutputStream());
+            return ResponseEntity.ok().build();
+        } catch (IOException ex) {
+            logger.error("Download failed: {}", ex.getMessage());
+            return ResponseEntity.ok().build();
         }
-        return fileId;
     }
 
 

+ 7 - 6
src/main/resources/static/app/main/partyUser/workResourceLibrary/fileTabList.js

@@ -260,12 +260,13 @@
                 if($scope.content.file!= null){
                     var filename=$scope.content.file.name;
                     var loc = filename.lastIndexOf('.');
-                    var filetype = filename.substring(loc + 1, filename.length).toLowerCase();
-                    if(filetype!='pdf'){
-                        $scope.showMsg("消息", "只允许上传pdf", "#dicmodal");
-
-                        $scope.content.file=null;
-                    }
+                    var filetype = filename.substring(loc, filename.length).toLowerCase();
+                    $scope.content.extendedname = filetype;
+                    // if(filetype!='pdf'){
+                    //     $scope.showMsg("消息", "只允许上传pdf", "#dicmodal");
+                    //
+                    //     $scope.content.file=null;
+                    // }
                 } else{
                     $scope.updata.updated=false;
                 }

+ 1 - 1
src/main/resources/static/app/main/partyUser/workResourceLibrary/fileTreeList.html

@@ -103,7 +103,7 @@
                                             <td class="text-center">
                                                 <button class="btn td-btn bg-light-first waves-effect" title="查看"
                                                         data-placement="center" data-animation="am-fade-and-scale"
-                                                        ng-click="viewFile(f.fileid,f.filename)">
+                                                        ng-click="viewFile(f.fileid,f.filename)" ng-show="f.extendedname == '.pdf'">
                                                     查看
                                                 </button>
                                                 <button class="btn td-btn bg-pink waves-effect" title="修改"