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');
}
}