jintao.geng 2 долоо хоног өмнө
parent
commit
0e8e8a29a0

+ 16 - 10
auc/src/main/java/cn/hobbystocks/auc/web/LotController.java

@@ -24,8 +24,8 @@ import cn.hobbystocks.auc.vo.LotVO;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import com.google.common.net.HttpHeaders;
+import io.swagger.annotations.*;
 import org.apache.logging.log4j.util.Strings;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -188,6 +188,20 @@ public class LotController extends AdminBaseController {
 
     @ApiOperation(value = "导出拍品列表信息", notes = "拍品列表信息\n", response = AjaxResult.class, responseContainer = "AjaxResult.success")
     @PostMapping("/export")
+    @ApiResponses({
+        @ApiResponse(
+            code = 200,
+            message = "导出成功,返回Excel文件流",
+            responseHeaders = {
+                // 声明文件下载核心响应头
+                @ResponseHeader(name = HttpHeaders.CONTENT_TYPE, description = "文件类型:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"),
+                @ResponseHeader(name = HttpHeaders.CONTENT_DISPOSITION, description = "文件下载头:attachment; filename=xxx.xlsx"),
+                @ResponseHeader(name = "Pragma", description = "禁用缓存"),
+                @ResponseHeader(name = "Cache-Control", description = "禁用缓存")
+            }
+        ),
+        @ApiResponse(code = 500, message = "导出失败,服务器异常")
+    })
     public AjaxResult export(@RequestBody LotRequest request, HttpServletResponse response) {
 
         List<LotExportDTO> lotList = lotService.exportLotList(request);
@@ -196,13 +210,5 @@ public class LotController extends AdminBaseController {
         return AjaxResult.success();
     }
 
-    @ApiOperation(value = "导出拍品列表信息2", notes = "拍品列表信息\n", response = AjaxResult.class, responseContainer = "AjaxResult.success")
-    @PostMapping("/export2")
-    public AjaxResult exportV2(@RequestBody LotRequest request) {
-
-        List<LotExportDTO> lotList = lotService.exportLotList(request);
-        return AjaxResult.successPage(lotList);
-    }
-
 
 }

+ 16 - 1
lot/src/main/java/cn/hobbystocks/auc/common/utils/ExcelUtils.java

@@ -1,5 +1,6 @@
 package cn.hobbystocks.auc.common.utils;
 
+import com.google.common.net.HttpHeaders;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.ss.util.CellRangeAddressList;
@@ -13,6 +14,7 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
+import java.nio.charset.StandardCharsets;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -110,8 +112,21 @@ public class ExcelUtils<T> {
             out = new FileOutputStream(getAbsoluteFile(filename));
 //            wb.write(out);
             //导出数据
+            String encodedFileName = new String(sheetName.getBytes("gb2312"), "ISO8859-1") + ".xlsx";
+
+            // 1.3 设置核心响应头(缺一不可)
+            response.setCharacterEncoding(StandardCharsets.UTF_8.name());
+            // Excel文件的MIME类型(PDF用application/pdf,通用二进制流用application/octet-stream)
+            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+            // 关键:触发浏览器下载,而非直接打开
+            response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + encodedFileName + "\"");
+            // 禁用缓存,避免Swagger重复下载旧文件
+            response.setHeader("Pragma", "no-cache");
+            response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
+            response.setDateHeader("Expires", 0);
+
             //设置Http响应头告诉浏览器下载这个附件
-            response.setHeader("Content-Disposition", "attachment;Filename=" + new String(sheetName.getBytes("gb2312"), "ISO8859-1") + ".xlsx");
+            response.setHeader("Content-Disposition", "attachment;Filename=" + encodedFileName);
             out = response.getOutputStream();
             wb.write(out);
         } catch (Exception e) {