laravel

laravel文件系统配置和上传图片put, putFile, putFileAs的区别

日期: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实现缩略图片和水印的功能。

 

 

 

 

<<点击返回