Thinkphp5如何实现完整的图片和视频上传功能 | 熊阿哥博客

Thinkphp5如何实现完整的图片和视频上传功能

Thinkphp   2025-01-26 11:57   92   0  

底层原理

上传文件的过程主要分为以下几个步骤:

前端表单设计:HTML 表单用于收集用户选择的文件,并提交给服务器。

文件上传处理:服务器端接收上传的数据,校验文件类型和大小,并保存到指定位置。

返回结果:根据上传的结果向客户端返回适当的响应。

示例代码

1. 前端表单设计

首先,需要一个HTML表单让用户选择文件上传。

<!-- views/index/upload.html -->
<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file" accept="image/*,video/*">
    <button type="submit">上传</button>
</form>

这里 accept 属性限制了用户只能选择图片或视频文件。


2. 后端处理逻辑

接下来,在TP5应用中创建一个处理文件上传的控制器。

// controllers/IndexController.php
namespace app\index\controller;

use think\Controller;
use think\Request;
use think\facade\Filesystem;

class Index extends Controller
{
    public function upload(Request $request)
    {
        // 检查是否有文件上传
        if ($request->isPost() && $request->file('file')) {
            $file = $request->file('file');

            // 验证文件类型
            $ext = $file->getExtension();
            if (!in_array($ext, ['jpg', 'jpeg', 'png', 'gif', 'mp4'])) {
                return json(['code' => 400, 'msg' => '只允许上传图片或视频文件']);
            }

            // 验证文件大小
            $maxSize = 10 * 1024 * 1024; // 10MB
            if ($file->getSize() > $maxSize) {
                return json(['code' => 400, 'msg' => '文件大小超过限制(10MB)']);
            }

            // 定义上传目录
            $path = 'uploads/' . date('Y/m/d') . '/';

            // 使用thinkphp的文件系统来保存文件
            $result = Filesystem::disk('public')->putFile($path, $file);
            if ($result) {
                // 返回成功信息
                return json(['code' => 200, 'msg' => '上传成功', 'data' => ['path' => $path . $result]]);
            } else {
                // 返回失败信息
                return json(['code' => 500, 'msg' => '上传失败']);
            }
        } else {
            return json(['code' => 400, 'msg' => '未接收到文件']);
        }
    }
}

3. 配置文件系统驱动

确保你的 ThinkPHP 项目已经配置了文件系统驱动,例如阿里云OSS、七牛云存储等,或者简单地保存到本地磁盘。

// config/filesystem.php
return [
    'disks' => [
        'local' => [
            'type' => 'local',
            'root' => './runtime/public',
        ],
        'public' => [
            'type' => 'local',
            'root' => './public',
            'url' => '/',
            'visibility' => 'public',
        ],
    ],
];

注意事项

上述代码示例中使用了ThinkPHP内置的文件系统类来处理文件存储,你可以根据需求选择合适的存储方式。

文件大小、类型等校验可以根据实际情况调整。

文件上传路径和文件名应确保唯一性,避免覆盖已存在的文件。

这个示例展示了如何在TP5框架中实现基本的图片和视频上传功能。实际应用中可能还需要考虑其他因素,如安全性检查、异常处理等。如有任何疑问或需要进一步的帮助,请随时告知。

原文链接:https://blog.csdn.net/qq_36777143/article/details/143249406








博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。