温馨提示×

ThinkPHP如何实现文件上传下载

小樊
39
2025-11-20 19:06:37
栏目: 编程语言

在ThinkPHP中,实现文件上传和下载的功能可以通过以下步骤来完成:

文件上传

  1. 创建控制器方法: 在你的控制器中创建一个方法来处理文件上传。

    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' => '没有文件上传']);
            }
        }
    }
    
  2. 配置路由: 在 route 目录下的 route.php 文件中添加路由规则。

    use think\Route;
    
    Route::post('upload', 'FileController/upload');
    
  3. 创建上传表单: 在你的视图文件中创建一个表单来上传文件。

    <form action="/upload" method="post" enctype="multipart/form-data">
        <input type="file" name="file" />
        <button type="submit">上传</button>
    </form>
    

文件下载

  1. 创建控制器方法: 在你的控制器中创建一个方法来处理文件下载。

    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' => '文件不存在']);
            }
        }
    }
    
  2. 配置路由: 在 route 目录下的 route.php 文件中添加路由规则。

    use think\Route;
    
    Route::get('download', 'FileController/download');
    
  3. 创建下载链接: 在你的视图文件中创建一个链接来下载文件。

    <a href="/download?filename=example.txt">下载文件</a>
    

注意事项

  • 确保 uploads 目录存在并且有写权限。
  • 对于大文件上传,可以考虑使用分片上传等技术来提高性能和稳定性。
  • 在生产环境中,建议对上传的文件进行安全检查,防止恶意文件上传。

通过以上步骤,你可以在ThinkPHP中实现文件的上传和下载功能。

0