首页 > 解决方案 > 无法在 PHP 中上传 mp4 文件

问题描述

我正在尝试使用 php 上传 .mp4 文件,但它不起作用。这是脚本:

处理上传的 PHP 类:

类 CustomFileUpload {

public static function upload($data)
{
    $errors = [];
    $response = [];
    $file = htmlentities(trim($data['file']['name']), ENT_QUOTES, 'UTF-8');
    $tmpDir = $data['file']['tmp_name'];
    $fileSize = $data['file']['size'];
    $fileExt = strtolower(pathinfo($file,PATHINFO_EXTENSION));
    $validExtensions = ['mp3', 'mp4'];
    $uploadDir = '';
    if ($fileExt == "mp4") {
        $uploadDir = './public/ex-media/videos/';
    } elseif ($fileExt == "mp3") {
        $uploadDir = './public/ex-media/audios/';
    } else {
        $errors['msg'] = 'file type not allowed.';
        $response['status'] = 407;
        $response['msg'] = "error";
        $response['error'] = $errors;

        return $response;
    }

    if(!in_array($fileExt,$validExtensions))
    {
        $errors['msg'] = "Invalid extension detected for selected image file, please use a supported image extension.";
        $errors['ext-detected'] = $fileExt;
    }

    if(empty($errors))
    {
        $uuid = explode("-", $data['uuid']);
        $fileNewName = $uuid[0]."-".time().".".$fileExt;

        var_dump($tmpDir);
        exit();

        $moved = move_uploaded_file($tmpDir, $uploadDir.$fileNewName);

        if ($moved) {
            $response['status'] = 200;
            $response['msg'] = "success";
            $response['fileUrl'] = $fileNewName;

            echo('heres ur newly uploaded file - '.$fileNewName);
            exit();

            return $response;
        } else {
            $response['status'] = 502;
            $response['msg'] = "failed";
            $response['error'] = "upload failed for UNKNOWN reasons!";

            echo('error while uploading file - go to CustomFileUpload.php');
            exit();

            return $response;
        }
    }
    else {
        $response['status'] = 407;
        $response['msg'] = "error";
        $response['error'] = $errors;

        return $response;
    }
}

}

调用 CustomFileUpload 类的 PHP 控制器操作:

public function uploadAction()
{
    $response = ['status_code' => 404];
    if ($this->getRequest()->isPost())
    {
        $data = $this->params()->fromPost();

        $request = $this->getRequest();
        $data = array_merge_recursive(
            $request->getPost()->toArray(),
            $request->getFiles()->toArray()
        );

        $fileUpload = CustomFileUpload::upload($data);
    }

    return new JsonModel($response);
}

如果我上传一个 mp3 文件,它可以完美运行,但对于 mp4,情况正好相反。因此,我尝试转储 tmp_dir 的内容,var_dump($tmpDir); exit();如 CustomFileUpload 类所示。这样做之后,事实证明tmp_dirmp4 文件是空的,而对于 mp3 文件则不是这样,如下面的屏幕截图所示(取自 Postman)。

mp3 文件的 tmp_dir 不是空的:

在此处输入图像描述

mp3 文件的 tmp_dir 为空:

在此处输入图像描述

请问,我该如何解决这些问题?

标签: phpzend-framework3laminas

解决方案


推荐阅读