日期:2017-03-15 阅读:5732
dmandwp系统 - wordpress系统和DM系统区块建站>>
filesystems 配置:
http://d.laravel-china.org/docs/5.4/filesystem
打开 config/filesystems.php
对于下面代码要理解:
'default' => 'local',
'disks' => [
'local' => [ --- 这个就是前面default默认的。
'driver' => 'local',
'root' => storage_path('app'),
],
'public' => [ --- 当然,你了可以把这个定义为default
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
],
------------
disk里的local和public的不同,就是public里的 'root' => storage_path('app/public'),多了一个public
之所以叫public,就是公开可以访问的。
访问的前提,则是 Artisan 命令创建符号链接:php artisan storage:link
这样,就在根目录的public有一个storage目录,指向根目录下的storage/app/public
如果根目录下的storage/app/没有public目录,则会报错。
所以echo asset('storage/file.jpg');,则指向根目录下的storage/app/public/file.jpg
同样:echo asset('storage/slider/file.jpg');,则指向根目录下的storage/app/public/slider/file.jpg
---------------
关于disk,因为上面default默认的是disk,
所以当上传图片时:
http://d.laravel-china.org/docs/5.4/filesystem#file-uploads
$path = Storage::putFile('avatars', $request->file('avatar'));
把图片传到根目录下的storage/app/avatars下
其实就是 $path = Storage::disk('local')->putFile('avatars', $request->file('avatar'));
因为default是local,所以省略了disk('local')
$path = Storage::disk('public')->putFile('avatars', $request->file('avatar'));
则把图片传到根目录下的storage/app/public/avatars下
------------------
put , putFile, putFileAs的区别:
https://laravel.com/api/5.4/Illuminate/Filesystem/FilesystemAdapter.html#method_putFile
------------------------
use Illuminate\Support\Facades\Storage;
public function insert(Request $request){
if($request->hasFile('image')){
$file = $request->file('image');
$ext = $file->getClientOriginalExtension();
$filename = date('YmdHis-').rand(1000,9999).'.'.$ext;
。。。。
}
put 可以改名,但存资源。
Storage::put('file.jpg', File::get($file)); --- 要加上 use Illuminate\Support\Facades\File;
或
// $realPath = $file->getRealPath(); //临时文件的绝对路径
//$bool = Storage::disk('uploads')->put($filename, file_get_contents($realPath));
Storage::disk('local')->put('file.txt', 'Contents');
总之,用put,就要调资源。不如putFileAs方便。随便两者功能一样,但是putFile不能改名。
putFile 不改名 Storage::putFileAs('public/slider', $file);这样,会存成一个随要的文件名。
putFileAs 可以改名 Storage::putFileAs('public/slider', $file, $filename);
具体请看视频教程。
-----------------
下节课,我们讲 laravel使用intervention实现缩略图片和水印的功能。