在ThinkPHP中,实现文件上传和下载的功能可以通过以下步骤来完成:
创建控制器方法: 在你的控制器中创建一个方法来处理文件上传。
use think\Request;
use think\facade\Filesystem;
class FileController extends Controller
{
public function upload(Request $request)
{
// 检查是否有文件上传
if ($request->hasFile('file')) {
// 获取上传的文件对象
$file = $request->file('file');
// 移动到框架应用根目录/uploads/ 目录下
$info = $file->move(ROOT_PATH . 'public' . EXT . '/uploads');
if ($info) {
// 成功上传后 获取上传信息
return json(['message' => '上传成功', 'path' => $info->getSaveName()]);
} else {
// 上传失败获取错误信息
return json(['message' => '上传失败', 'error' => $file->getError()]);
}
} else {
// 没有文件上传
return json(['message' => '没有文件上传']);
}
}
}
配置路由:
在 route 目录下的 route.php 文件中添加路由规则。
use think\Route;
Route::post('upload', 'FileController/upload');
创建上传表单: 在你的视图文件中创建一个表单来上传文件。
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<button type="submit">上传</button>
</form>
创建控制器方法: 在你的控制器中创建一个方法来处理文件下载。
use think\Request;
use think\facade\Filesystem;
class FileController extends Controller
{
public function download(Request $request)
{
// 获取文件名
$filename = $request->param('filename');
// 检查文件是否存在
if (Filesystem::disk('public')->exists('uploads/' . $filename)) {
// 设置下载头信息
return Filesystem::disk('public')->download('uploads/' . $filename);
} else {
// 文件不存在
return json(['message' => '文件不存在']);
}
}
}
配置路由:
在 route 目录下的 route.php 文件中添加路由规则。
use think\Route;
Route::get('download', 'FileController/download');
创建下载链接: 在你的视图文件中创建一个链接来下载文件。
<a href="/download?filename=example.txt">下载文件</a>
uploads 目录存在并且有写权限。通过以上步骤,你可以在ThinkPHP中实现文件的上传和下载功能。