Zhangtf 1 週間 前
コミット
49afc055a3

+ 12 - 5
xzl-admin/src/main/java/com/xzl/web/service/impl/KnowledgeFileServiceImpl.java

@@ -15,6 +15,8 @@ import com.xzl.web.service.KnowledgeFileService;
 import io.minio.*;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -187,11 +189,16 @@ public class KnowledgeFileServiceImpl implements KnowledgeFileService {
         try (InputStream inputStream = minioUtil.downLoad(BUCKET_NAME, knowledgeFile.getFilePath());
              OutputStream outputStream = response.getOutputStream()) {
 
-            // 设置响应头
-            setResponseHeaders(response, knowledgeFile);
-
-            // 复制文件流到响应输出流
-            copyStream(inputStream, outputStream);
+            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
+            response.setHeader(
+                    HttpHeaders.CONTENT_DISPOSITION,
+                    "attachment; filename=" + URLEncoder.encode(knowledgeFile.getFileName(), "UTF-8")
+            );
+            byte[] buffer = new byte[1024];
+            int bytesRead;
+            while ((bytesRead = inputStream.read(buffer)) != -1) {
+                outputStream.write(buffer, 0, bytesRead);
+            }
         } catch (Exception e) {
             throw new RuntimeException("文件下载失败: " + e.getMessage(), e);
         }

+ 42 - 16
xzl-ui/src/views/fileTree/folder/index.vue

@@ -784,26 +784,52 @@ export default {
         this.getList(); // 刷新文件列表
       });
     },
+    //  handleDownload(row) {
+    //   // if (!row || !row.fileId) {
+    //   //   this.$message.error('文件 ID 无效,无法下载')
+    //   //   return
+    //   // }
+    //   try {
+    //     // this.loading = true
+    //     const response =  download(row.fileId)
+    //     console.log(response)
+    //     this.parseBlob(response, row.fileId)
+    //     // if (response.status === 200) {
+    //     //   this.parseBlob(response, '文件名.pdf')
+    //     //   // const blob = new Blob([response.data], {type: 'application/octet-stream'})
+    //     //   // saveAs(blob, row.fileName)
+    //     //   this.$message.success('文件下载成功')
+    //     // } else {
+    //     //   this.$message.error('文件下载失败,响应状态码异常')
+    //     // }
+    //   } catch (error) {
+    //     console.error('文件下载出错:', error)
+    //     this.$message.error('文件下载失败,请重试')
+    //   }
+    // },
     async handleDownload(row) {
-      if (!row || !row.fileId) {
-        this.$message.error('文件 ID 无效,无法下载')
-        return
-      }
       try {
-        this.loading = true
-        const response = await download(row.fileId)
+        // 等待Promise解析,获取响应对象
+        const response = await download(row.fileId) // fileId替换为实际的文件标识
+        console.log(response)
+        // 使用若依封装的download方法(推荐,自动处理下载)
+        // const fileName = response.headers['content-disposition']
+        //   ? decodeURIComponent(response.headers['content-disposition'].split('filename=')[1])
+        //   : 'defaultFileName'
         this.parseBlob(response, row.fileName)
-        // if (response.status === 200) {
-        //   this.parseBlob(response, '文件名.pdf')
-        //   // const blob = new Blob([response.data], {type: 'application/octet-stream'})
-        //   // saveAs(blob, row.fileName)
-        //   this.$message.success('文件下载成功')
-        // } else {
-        //   this.$message.error('文件下载失败,响应状态码异常')
-        // }
+
+        // 或者手动处理(了解原理)
+        /* const blob = response.data
+        const url = window.URL.createObjectURL(blob)
+        const link = document.createElement('a')
+        link.href = url
+        link.download = fileName
+        document.body.appendChild(link)
+        link.click()
+        document.body.removeChild(link)
+        window.URL.revokeObjectURL(url) */
       } catch (error) {
-        console.error('文件下载出错:', error)
-        this.$message.error('文件下载失败,请重试')
+        this.$modal.msgError('下载失败:' + error.message)
       }
     },
     parseBlob(blob, fileName) {