ThinkPHP-文件下载和查看

2023-05-03 13:54:18 浏览数 (2)

一、前言

在 Web 应用程序中,文件下载和查看是非常常见的功能。在 ThinkPHP 框架中,我们可以很方便地实现这些功能,本文将介绍如何在 ThinkPHP 中实现文件下载和查看功能。

二、文件下载

文件下载是指将服务器上的文件发送到客户端,供客户端用户下载和保存。在 ThinkPHP 中,我们可以使用以下代码来实现文件下载功能:

代码语言:javascript复制
public function download()
{
    // 获取要下载的文件路径
    $file_path = './uploads/test.pdf';
    
    // 检查文件是否存在
    if (!file_exists($file_path)) {
        // 文件不存在,抛出异常
        abort(404, 'File not found.');
    }
    
    // 设置响应头,告诉浏览器下载文件
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($file_path).'"');
    header('Content-Length: '.filesize($file_path));
    
    // 读取文件内容并发送到客户端
    readfile($file_path);
}

在上述代码中,我们首先使用 file_exists() 函数检查要下载的文件是否存在,如果文件不存在,我们使用 abort() 函数抛出异常,告诉客户端文件未找到。如果文件存在,我们使用 header() 函数设置响应头,告诉浏览器将文件作为附件下载,并设置文件名。最后,我们使用 readfile() 函数读取文件内容并发送到客户端。

三、文件查看

文件查看是指在浏览器中查看服务器上的文件,常见的文件类型包括图片、PDF 文件、文本文件等。在 ThinkPHP 中,我们可以使用以下代码来实现文件查看功能:

代码语言:javascript复制
public function view()
{
    // 获取要查看的文件路径
    $file_path = './uploads/test.pdf';
    
    // 检查文件是否存在
    if (!file_exists($file_path)) {
        // 文件不存在,抛出异常
        abort(404, 'File not found.');
    }
    
    // 获取文件 MIME 类型
    $file_type = mime_content_type($file_path);
    
    // 设置响应头,告诉浏览器打开文件
    header('Content-Type: '.$file_type);
    header('Content-Length: '.filesize($file_path));
    
    // 读取文件内容并发送到客户端
    readfile($file_path);
}

在上述代码中,我们使用 mime_content_type() 函数获取要查看的文件的 MIME 类型,然后使用 header() 函数设置响应头,告诉浏览器打开文件。最后,我们使用 readfile() 函数读取文件内容并发送到客户端。

需要注意的是,如果要查看的文件是图片或 PDF 文件,我们可以在 HTML 中使用 <img> 标签或 <embed> 标签来显示文件内容。如果要查看的文件是文本文件,我们可以在 HTML 中使用 <pre> 标签或 <iframe> 标签来显示文件内容。

0 人点赞