解决Laravel FTP存储中的FileNotFoundException错误
Laravel FTP存储读取文件触发FileNotFoundException问题排查
问题描述
在Laravel项目中使用FTP存储时,触发Illuminate\Contracts\Filesystem\FileNotFoundException错误。需求是从FTP服务器读取图片文件,返回给前端JS同时附带FTP服务器链接。已确认数据库和FTP服务器中均存在目标图片文件,但仍无法读取FTP路径下的文件。
相关代码与配置
控制器代码
$explode = explode('#',$lampiran->lampiran_gambar); foreach($explode as $row){ if($row == null){ $row1[] = 'null'; }else{ $row1[] = Storage::disk('ftp')->get('/lampiranSurat' . $row); } } if($pegawai_pejabat->jenis_jabatan_id == 1){ return response()->json([ 'meta' => [ 'code' => 200, 'status' => 'success', 'message' => 'Data Ditemukan', ], 'data_verifikasi' => $verifikasi, 'lampiran_gambar' => $row1, 'pegawai_verif' => $pegawai_verif, ]); }
filesystem配置(config/filesystems.php)
'default' => env('FILESYSTEM_DRIVER', 'ftp'), 'ftp' => [ 'driver' => 'ftp', 'host' => env('FTP_HOST'), 'username' => env('FTP_USERNAME'), 'password' => env('FTP_PASSWORD'), 'root' => '/web', ],
.env配置
FTP_HOST=exampleftpserver.com FTP_USERNAME=userftp FTP_PASSWORD=password123
排查与解决步骤
- 检查路径拼接准确性:代码中拼接的路径是
/lampiranSurat' . $row,结合FTP配置的root为/web,最终实际访问的FTP路径是/web/lampiranSurat[文件名]。需确认FTP服务器中图片是否存放在对应目录,同时注意$row是否包含多余的斜杠或大小写不匹配(FTP通常区分大小写)。可临时添加dd('/lampiranSurat' . $row)打印完整路径,对比FTP实际文件路径。 - 验证FTP权限与连接:确认FTP账号拥有
/web/lampiranSurat目录的读取权限,可添加测试代码验证目录/文件是否存在:$disk = Storage::disk('ftp'); dd($disk->exists('/lampiranSurat' . $row)); // 检查单个文件是否存在 - 修正逻辑适配需求:你的需求是返回FTP链接,而
Storage::disk('ftp')->get()是读取文件二进制内容,完全不符合需求。改为生成可访问的FTP链接(注意:带账号密码的链接存在安全风险,建议改用后端代理或配置FTP的HTTP映射):$ftpBaseUrl = "ftp://" . env('FTP_USERNAME') . ":" . env('FTP_PASSWORD') . "@" . env('FTP_HOST'); $row1[] = $ftpBaseUrl . '/web/lampiranSurat' . $row; - 清除配置缓存:执行
php artisan config:clear确保.env中的FTP配置已正确加载,避免缓存导致的配置失效。
内容的提问来源于stack exchange,提问作者gagaltotal666
相关产品推荐
相关产品推荐

