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

Laravel文件上传服务器报错:文件不存在或不可读,本地正常如何解决?

Laravel 文件上传线上服务器报错:"The "" file does not exist or is not readable." 解决办法

可能原因及对应解决方案

1. 服务器存储目录权限问题

线上服务器的storage/app/public/uploads目录可能缺少读写权限,导致文件无法正常写入。

  • 执行权限配置命令(根据服务器运行用户调整,以下为Apache/Nginx通用示例):
    chmod -R 755 storage/
    chown -R www-data:www-data storage/
    

2. 存储磁盘配置与软链接问题

检查config/filesystems.php中public磁盘的配置是否正确:

'public' => [
    'driver' => 'local',
    'root' => storage_path('app/public'),
    'url' => env('APP_URL').'/storage',
    'visibility' => 'public',
],
  • 配置完成后,创建存储目录到公共目录的软链接:
    php artisan storage:link
    
    若线上无法执行Artisan命令,可手动创建软链接:
    ln -s /你的项目路径/storage/app/public /你的项目路径/public/storage
    

3. 上传代码规范优化

原代码存在冗余且未做文件有效性校验,建议修改为更规范的写法:

$file = $request->file('file');

// 先校验文件是否有效
if (!$file || !$file->isValid()) {
    abort(400, '上传文件无效');
}

$fileName = time() . '_' . $file->getClientOriginalName();
// 使用storeAs方法简化存储逻辑
$path = $file->storeAs('public/uploads', $fileName);
// 生成正确的访问URL
$url = Storage::url(str_replace('public/', '', $path));

$fileModel = new File;
$fileModel->name = $fileName;
$fileModel->file_path = $url;
$fileModel->save();

4. PHP上传大小限制

线上服务器的PHP配置可能限制了上传文件的大小,导致文件未完整上传就被截断。

  • 修改php.ini中的相关配置:
    upload_max_filesize = 64M
    post_max_size = 64M
    max_execution_time = 300
    
    修改后重启Apache/Nginx及PHP服务。

5. 请求参数与表单验证

确保前端表单提交时设置了enctype="multipart/form-data"属性,且请求中包含名为file的上传字段。同时在控制器中增加验证:

$request->validate([
    'file' => 'required|file',
]);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:56:09