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

Laravel上传jpg文件报failed to open stream无此文件或目录如何修复

问题原因

报错日志中的目标路径为/var/www/html/testdreamhunt/storageapp/public/huntSchedule/09132021101356_photo1.PNG,可以看到storage和app两个目录名称直接拼接成了storageapp,缺少路径分隔符,导致系统找不到对应目录。

具体问题点

  • storage_path() 函数返回的路径末尾默认不带斜杠,直接拼接app/public/huntSchedule会触发路径拼接错误
  • 未提前校验目标目录是否存在,若huntSchedule目录未提前创建,也会触发同类报错
  • Laravel上传文件实例不推荐用File::copy处理,自带的move方法适配上传文件的处理逻辑,稳定性更高

修复后代码

if(array_key_exists('fileToUpload', $request->all()))
{
    $access_time = Carbon::now()->format('mdYHis');
    // 用系统常量DIRECTORY_SEPARATOR拼接路径,兼容Windows、Linux等不同操作系统
    $directory = storage_path() . DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'public' . DIRECTORY_SEPARATOR . 'huntSchedule';
    // 目录不存在时递归创建,设置目录权限为755
    if(!\File::exists($directory)) {
        \File::makeDirectory($directory, 0755, true);
    }
    $files = $request->fileToUpload;
    $filename = $access_time.'_photo'.Auth::user()->id.'.'.$files->getClientOriginalExtension();
    // 调用上传文件实例的move方法完成文件移动
    $files->move($directory, $filename);
    $schedule->photo = 'storage/huntSchedule/'.$filename;
}

额外优化建议

你也可以直接用Laravel自带的Storage门面处理上传逻辑,无需手动拼接路径,只要提前执行php artisan storage:link创建存储软链即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:27:00