正在学习 Laeavel 的有关于图片上传,由于 Laravel 官方说明 对我而言仍有些不够清楚,因此昨日在本站发了一篇[有关 storage:link 路径设置] 请教邦友,经过许多邦友热心提供宝贵意见,加上自己经过一连串测试练习终于有些心得,仅此,也藉本站发表分享一下心得,以慰邦友们热心协助,也许也能提供后进初学者参考因而省些冤枉路。
本文论及之技术範围仅限于:文件上传之 Laravel 使用设定
Laravel 之设定档案=>config/filesystems.php('s3'部分省略)
/*|这里是说 预设存储的 disk => 如果在.env 档案中有设置 FILESYSTEM_DRIVER=*** 就使用 ***,若 .env 中没有设置则使用 local ( 就是本机 disk )。 */ 'default' => env('FILESYSTEM_DRIVER', 'local'),//使用 本机 disk 时,还可以有 2选1 目录模式 可供任选:'disks' => [ /*|一、选择使用 项目根目录/storage... 这个是预设选项|第一句话意思:本机存储 |第二句话意思:上传之档案会存放于 项目根目录/storage/app 这个资料夹 =>如果想要修改可以改动 ('app') 如下: ex:('/')=存在storage 目录, ('app/photos')=存在storage/app/photos 目录, 余.. 类推|默认使用 相对路径 但也可以加上第三句话 'url' => env('APP_URL').'/storage', 意思:指定要使用 绝对路径 */ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), ],//选用本选项 必须 将 local 改成 public 像这样'default' => env('FILESYSTEM_DRIVER', 'public'),/*|二、选择使用 网站根目录/public... 这个选项|第一句话意思:本机存储 |第二句话意思:上传之档案会存放于 项目根目录/storage/app/public 这个资料夹 =>如果想要修改可以改动 ('app/public') 方法如上述|第三句话意思:默认使用 绝对路径 :域名/storage/app/public/档案名|第四句话意思:让档案变成公开,让访客可以读取*/ 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ],],//这里是关键:上传的档案都存放在 storage 目录下,访客是无法访问得到的,若要提供给访客能看得到必须执行一条命令 ,以便在 网站根目录public 里面产生一个 storage 的捷径。
php artisan storage:link
/*|这句话意思:在 public 目录里建立一个 storage 的捷径 直接链接到档案存放位置。|这里的 ('app/public') 也是可以修改的,方法也如上所述。|甚至这个 ('storage') 也是可以修改的 ex: ('aaa') 或 ('BBB')...随意取名字,可同时多个存在。*/ 'links' => [ public_path('storage') => storage_path('app/public'), ],
如上,说明以完结。若有初学者有兴趣试试看的,可以参考以下做法:
1、打开 web.php 2、打开 welcome.blade.php 3、浏览器上传图片 4、在目录中 检查图片
//1、web.php <?phpuse Illuminate\Support\Facades\Route;use Illuminate\Http\Request;Route::get('/', function () { return view('welcome');});Route::PATCH('/upload', function (Request $request){$path = $request->file->store('/'); $url = Storage::url($path); return response()->json(['message' => 'success', 'data' => $url], 200);});//2、 welcome.blade.php (将 Laravel 换成 以下 的 form)<form method="post" enctype="multipart/form-data" action="/upload"> {{ csrf_field() }} {{ method_field('PATCH') }} <input name="file" type="file"> <input name="upload" type="submit" value="上传"></form>
以上就如同野人献曝,或有欠妥敬请前辈指教。