You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel大文件上传报错求助:文件不存在或不可读问题排查

大文件上传Laravel报错:The "" file does not exist or is not readable.

我在Laravel项目中搭建了文件上传系统,小文件可正常上传,但生产服务器上传大文件时出现如下错误:

The "" file does not exist or is not readable.

最初推测问题与php.ini中的upload_max_filesize或post_max_size值过小有关,但已将upload_max_filesize设为5M,post_max_size设为8M,且通过运行php_ini_loaded_file和php_ini_scanned_files函数确认所有设置均来自服务器的/etc/php.ini文件,也正确重启了Apache服务器。即便如此,上传约3.6MB的文件时仍会触发上述错误。


补充:可复现的测试代码

路由

Route::get('/temp/upload-test', [TempController::class, 'uploadTest']);
Route::post('/temp/upload-test', [TempController::class, 'uploadFileTest']);

控制器

public function uploadTest() {
    return view('uploadTest');
}

public function uploadFileTest() {
    $file = request()->file('file_0');

    if ($file) {
        $mimeType = $file->getMimeType(); // <-- 此处触发错误

        return [
            'mimeType' => $mimeType
        ];
    }
}

uploadTest Blade文件

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
    </head>
    <body>
        <form>
            <input type="file">
            <input type="submit">
        </form>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/axios/1.1.3/axios.min.js">
        </script>
        <script>
            let file;

            const process = async (formData) => {
                const response = await axios.post('/temp/upload-test', formData, {
                    headers: {
                        'Content-Type': 'multipart/form-data'
                    }
                });

                console.log(response.data);
            };

            document.querySelector('input[type="file"]').addEventListener('change', (evt) => {
                if (evt.target.files[0]) {
                    file = evt.target.files[0];
                }
            });

            document.querySelector('form').addEventListener('submit', async (evt) => {
                if (file) {
                    let formData = new FormData();

                    formData.append(`file_0`, file);

                    process(formData);
                }

                evt.preventDefault();
            });
        </script>
    </body>
</html>

该代码在本地环境可正确返回所有文件(无论大小)的MIME类型,但服务器上上传超过2MB的文件就会失败,因此判断是服务器配置问题,但php.ini设置看似正确且已多次重启Apache。


Laravel错误日志片段

[timestamp] production.ERROR: The "" file does not exist or is not readable. {"exception":"[object] (Symfony\Component\Mime\Exception\InvalidArgumentException(code: 0): The \"\" file does not exist or is not readable. at /$
[stacktrace]
#0 /var/www/sub-folder/vendor/symfony/mime/MimeTypes.php(134): Symfony\Component\Mime\FileinfoMimeTypeGuesser->guessMimeType('')
#1 /var/www/sub-folder/vendor/symfony/http-foundation/File/File.php(77): Symfony\Component\Mime\MimeTypes->guessMimeType('')
#2 /var/www/sub-folder/app/Http/Controllers/TempController.php(61): Symfony\Component\HttpFoundation\File\File->getMimeType()
#3 /var/www/sub-folder/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\Http\Controllers\TempController->uploadFileTest()
#4 /var/www/sub-folder/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\Routing\Controller->callAction('uploadFileTest', Array)

补充2:排除Axios问题

通过测试确认,使用无JS的标准表单提交时也会出现相同问题。


可能的排查方向

  • 检查max_input_time配置:大文件上传耗时可能超过php.ini中max_input_time的默认值,导致上传中断,临时文件未正常生成或被提前清理。可适当增大该值,比如设为120。
  • 验证临时目录权限:PHP上传文件时会先存储到upload_tmp_dir指定的临时目录,若该目录权限不足(比如Apache进程无读写权限),PHP无法写入临时文件,后续读取就会报错。可通过phpinfo()查看upload_tmp_dir路径,检查其权限设置。
  • Apache的LimitRequestBody限制:Apache自身有请求体大小限制,默认可能为2MB,即使PHP配置满足要求,Apache会先拦截超过大小的请求。需在httpd.conf或虚拟主机配置中添加LimitRequestBody 8388608(对应8MB,数值单位为字节),之后重启Apache。
  • Laravel中间件或验证规则:检查项目中是否存在全局或路由级别的中间件,对文件上传大小做了额外限制;也可在控制器中添加明确的文件大小验证,排查是否是验证环节导致文件对象异常。
  • 临时文件清理机制:服务器的临时文件清理服务(如systemd-tmpfiles)可能在上传完成前就清理了临时文件,导致Laravel读取时找不到文件。可调整清理规则,延长临时文件保留时间。

内容的提问来源于stack exchange,提问作者HartleySan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:00:22