WIN-2308041133\Administrator 1 月之前
父節點
當前提交
cb6144bcaa
共有 1 個文件被更改,包括 27 次插入17 次删除
  1. 27 17
      app/api/controller/AuthController.php

+ 27 - 17
app/api/controller/AuthController.php

@@ -418,7 +418,7 @@ class AuthController
         return app('json')->fail('未授权');
     }
     /**
-     * 处理包含gzip压缩内容的txt文件,解压拼接后下载
+     * 处理包含gzip压缩内容的txt文件,解压拼接后保存到public目录并触发下载
      * @param Request $request
      * @return \think\response\Stream|mixed
      */
@@ -431,15 +431,15 @@ class AuthController
         }
 
         // 验证文件类型
-        try {
-            $file->validate(['ext' => 'txt']);
+//        try {
+//            $file->validate(['ext' => 'txt']);
             $info = $file->move(ROOT_PATH . 'runtime/temp');
-            if (!$info) {
-                return app('json')->fail('文件上传失败: ' . $file->getError());
-            }
-        } catch (\Exception $e) {
-            return app('json')->fail('文件验证失败: ' . $e->getMessage());
-        }
+//            if (!$info) {
+//                return app('json')->fail('文件上传失败: ' . $file->getError());
+//            }
+//        } catch (\Exception $e) {
+//            return app('json')->fail('文件验证失败: ' . $e->getMessage());
+//        }
 
         // 读取文件内容
         $filePath = $info->getRealPath();
@@ -476,16 +476,26 @@ class AuthController
             return app('json')->fail('未解析到有效内容');
         }
 
-        // 生成临时文件
-        $tempFileName = 'decoded_' . time() . '.txt';
-        $tempFilePath = sys_get_temp_dir() . DIRECTORY_SEPARATOR . $tempFileName;
-        file_put_contents($tempFilePath, $decodedContent);
+        // 定义保存目录(public/downloads)
+        $saveDir = ROOT_PATH . 'public' . DIRECTORY_SEPARATOR . 'downloads';
+        // 自动创建目录(如果不存在)
+        if (!is_dir($saveDir)) {
+            mkdir($saveDir, 0755, true); // 0755权限,允许读写执行
+        }
+
+        // 生成唯一文件名(避免重名)
+        $fileName = 'decoded_' . date('YmdHis') . '_' . uniqid() . '.txt';
+        $savePath = $saveDir . DIRECTORY_SEPARATOR . $fileName;
+
+        // 保存文件到public目录
+        if (!file_put_contents($savePath, $decodedContent)) {
+            return app('json')->fail('文件保存失败,请检查public目录权限');
+        }
 
-        // 触发下载并自动清理临时文件
+        // 触发浏览器下载(同时保留本地文件)
         return response()
-            ->file($tempFilePath)
+            ->file($savePath)
             ->header('Content-Type', 'text/plain')
-            ->header('Content-Disposition', 'attachment; filename="' . $tempFileName . '"');
-//            ->autoDelete($tempFilePath);
+            ->header('Content-Disposition', 'attachment; filename="' . $fileName . '"');
     }
 }