service = new TemporaryService(); } /** * 列表页面 * * @return Grid */ protected function grid() { return Grid::make(new FileTemp(), function (Grid $grid) { $helper = new GridHelper($grid, $this); $helper->columnId(); $grid->column('key', '文件键名'); $grid->column('ext', '文件扩展名'); $grid->column('expire_time', '过期时间')->sortable(); $helper->columnCreatedAt(); $helper->columnUpdatedAt(); // 添加查看按钮 $grid->column('view', '操作')->display(function () { $content = $this->service->get($this->key); if ($content) { $previewUrl = route('admin.temporary.preview', ['key' => $this->key]); return "查看"; } else { return "已过期"; } })->unescape(); // 添加清理过期文件按钮 $grid->tools(function (Grid\Tools $tools) { $tools->append(' 清理过期文件'); }); // 筛选器 $grid->filter(function (Grid\Filter $filter) { $filter->equal('id', 'ID'); $filter->like('key', '文件键名'); $filter->equal('ext', '文件扩展名'); $filter->between('expire_time', '过期时间')->datetime(); $filter->between('created_at', '创建时间')->datetime(); }); }); } /** * 详情页面 * * @param mixed $id * @return Show */ protected function detail($id) { return Show::make($id, new FileTemp(), function (Show $show) { $helper = new ShowHelper($show, $this); $helper->fieldId(); $show->field('key', '文件键名'); $show->field('ext', '文件扩展名'); $show->field('expire_time', '过期时间'); $helper->fieldCreatedAt(); $helper->fieldUpdatedAt(); // 添加查看按钮 $show->html(function () use ($show) { $content = $this->service->get($this->key); if ($content) { $previewUrl = route('admin.temporary.preview', ['key' => $this->key]); return "查看内容"; } else { return "已过期"; } }); }); } /** * 表单页面 * * @return Form */ protected function form() { return Form::make(new FileTemp(), function (Form $form) { $form->display('id'); $form->text('key', '文件键名')->required()->help('唯一的文件键名,用于获取临时文件'); $form->text('ext', '文件扩展名')->required()->help('文件扩展名,如txt, json, xml等'); $form->textarea('content', '文件内容')->required()->help('临时文件的内容'); $form->datetime('expire_time', '过期时间')->required()->help('文件过期时间,过期后将被自动清理'); $form->display('created_at'); $form->display('updated_at'); // 保存前回调 $form->saving(function (Form $form) { if ($form->isCreating()) { // 创建临时文件 $key = $form->key; $ext = $form->ext; $content = $form->content; $expireTime = $form->expire_time; // 使用临时文件服务保存 $this->service->save($ext, $content, $key, strtotime($expireTime) - time()); // 阻止表单继续保存,因为服务已经保存了数据 return false; } if ($form->isEditing()) { // 更新临时文件 $key = $form->key; $content = $form->content; $expireTime = $form->expire_time; // 使用临时文件服务更新 $this->service->update($key, $content, strtotime($expireTime) - time()); } }); }); } /** * 预览临时文件 * * @param string $key * @return \Illuminate\Http\Response */ public function preview($key) { $temp = FileTemp::where('key', $key)->first(); if (!$temp) { return response('临时文件不存在', 404); } $content = $this->service->get($key); if (!$content) { return response('临时文件已过期', 404); } $ext = $temp->ext; // 根据扩展名设置响应类型 $contentType = 'text/plain'; switch ($ext) { case 'json': $contentType = 'application/json'; break; case 'xml': $contentType = 'application/xml'; break; case 'html': $contentType = 'text/html'; break; case 'css': $contentType = 'text/css'; break; case 'js': $contentType = 'application/javascript'; break; } return response($content)->header('Content-Type', $contentType); } /** * 清理过期文件 * * @return \Illuminate\Http\RedirectResponse */ public function cleanup() { $count = $this->service->cleanup(); admin_success("清理成功", "已清理 {$count} 个过期临时文件"); return redirect()->route('dcat.admin.temporaries.index'); } }