From 5a7486e9893a706ed464e3197c9711286b077896 Mon Sep 17 00:00:00 2001
From: huliguo <2023611923@qq.com>
Date: 星期四, 26 六月 2025 11:12:28 +0800
Subject: [PATCH] 文件导入

---
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java |   83 ++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 80 insertions(+), 3 deletions(-)

diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
index 90d1020..0f5f3f5 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
@@ -39,14 +39,23 @@
 import lombok.extern.slf4j.Slf4j;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Value;
+
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
+import java.io.File;
 import java.io.IOException;
 import java.math.BigDecimal;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.temporal.ChronoUnit;
 import java.util.*;
@@ -622,7 +631,7 @@
      * @param file
      * @return
      */
-    @PostMapping("/upload")
+ /*   @PostMapping("/upload")
     public R upload(MultipartFile file){
         String s = null;
         try {
@@ -631,9 +640,77 @@
             throw new RuntimeException(e);
         }
         return R.ok(s);
+    }*/
+
+    private static final String FILE_DIRECTORY = "/var/files/ldf_files"; // Linux路径
+//    private static final String FILE_DIRECTORY = "E://ldf_files"; // Linux路径
+
+    @PostMapping("/upload")
+    public R handleFileUpload(@RequestParam("file") MultipartFile file) {
+        if (file.isEmpty()) {
+            return R.fail("请选择一个文件上传");
+        }
+        try {
+            // 1. 构建日期目录路径(格式:/年/月/日)
+            LocalDate today = LocalDate.now();
+            String datePath = String.format("/%d/%02d/%02d",
+                    today.getYear(), today.getMonthValue(), today.getDayOfMonth());
+
+            // 2. 完整目标目录路径
+            String fullDirPath = FILE_DIRECTORY + datePath;
+            File targetDir = new File(fullDirPath);
+
+            // 3. 自动创建目录(如果不存在)
+            if (!targetDir.exists()) {
+                targetDir.mkdirs(); // 递归创建所有父目录
+            }
+            String UUID= java.util.UUID.randomUUID().toString();
+            // 4. 保存文件
+            String filePath = fullDirPath + "/" +UUID+ file.getOriginalFilename();
+            File targetFile = new File(filePath);
+            file.transferTo(targetFile);
+            // 5. 返回可访问的URL(修正路径分隔符为Web格式)
+            return R.ok("http://zjrqxny.com/account/app-user/download" + datePath + "/" + UUID+file.getOriginalFilename());
+        } catch (IOException e) {
+            e.printStackTrace();
+            return R.fail("上传文件失败");
+        }
     }
-    
-    
+    @GetMapping("/download/{year}/{month}/{day}/{fileName:.+}")
+    @ResponseBody
+    public ResponseEntity<org.springframework.core.io.Resource> downloadFile( @PathVariable String year,
+                                                                              @PathVariable String month,
+                                                                              @PathVariable String day,
+                                                                              @PathVariable String fileName) {
+        System.out.println("下载文件名:"+fileName);
+        try {
+            // 1. 解码文件名
+            String decodedFileName = URLDecoder.decode(fileName, "UTF-8");
+
+
+            java.nio.file.Path filePath = java.nio.file.Paths.get(FILE_DIRECTORY, year, month, day, decodedFileName).normalize();
+            org.springframework.core.io.Resource resource = new org.springframework.core.io.UrlResource(filePath.toUri());
+            if (resource.exists() || resource.isReadable()) {
+                // 5. 设置下载头(兼容所有浏览器)
+                String contentDisposition = "attachment; filename=\"" + decodedFileName + "\"; " +
+                        "filename*=UTF-8''" + URLEncoder.encode(decodedFileName, "UTF-8").replace("+", "%20");
+
+                return ResponseEntity.ok()
+                        .contentType(MediaType.APPLICATION_OCTET_STREAM)
+                        .header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition)
+                        .body(resource);
+
+            } else {
+                return ResponseEntity.notFound().build();
+            }
+        } catch (IOException ex) {
+            ex.printStackTrace();
+            return ResponseEntity.status(500).build();
+        }
+    }
+
+
+
 
     /**
      * 清空绑定门店的用户门店数据

--
Gitblit v1.7.1