当前位置:首页 > PHP教程 > php文件操作 > 列表

Laravel 5.1对文件进行存储、移动和删除操作操作实例

发布:smiling 来源: PHP粉丝网  添加日期:2018-09-14 13:28:35 浏览: 评论:0 

Laravel 基于 Flysystem 提供了强大的文件系统对文件进行存储和删除,该文件系统和缓存一样,支持多种驱动,这些驱动包括本地驱动、FTP、Amazon S3以及 Rackspace,在这些驱动之上提供了统一的API方便随时切换驱动而不需要修改任何业务逻辑代码。

既然API方法一致,那么这里作为示例,我们使用本地驱动来演示如何使用文件系统API对文件进行存储和删除。

1、配置

文件系统配置位于config/filesystems.php,默认配置如下:

  1. return [ 
  2.     'default' => 'local',<br> 
  3.     'cloud' => 's3',<br> 
  4.     'disks' => [ 
  5.         'local' => [<br> 
  6.             'driver' => 'local',<br> 
  7.             'root' => storage_path('app'),<br> 
  8.         ], 
  9.         'ftp' => [<br> 
  10.             'driver' => 'ftp',<br> 
  11.             'host' => 'ftp.example.com',<br> 
  12.             'username' => 'your-username',<br> 
  13.             'password' => 'your-password',<br> 
  14.         ], 
  15.         's3' => [<br> 
  16.             'driver' => 's3',<br> 
  17.             'key' => 'your-key',<br> 
  18.             'secret' => 'your-secret',<br> 
  19.             'region' => 'your-region',<br> 
  20.             'bucket' => 'your-bucket',<br> 
  21.         ], 
  22.         'rackspace' => [<br> 
  23.             'driver' => 'rackspace',<br> 
  24.             'username' => 'your-username',<br> 
  25.             'key' => 'your-key',<br> 
  26.             'container' => 'your-container',<br> 
  27.             'endpoint' => 'htt<a href="/fw/photo.html" target="_blank">ps</a>://identity.api.rackspacecloud.com/v2.0/',<br> 
  28.             'region' => 'IAD',<br> 
  29.             'url_type' => 'publicURL',<br> 
  30.         ], 
  31.     ], 
  32. ]; 

从配置文件可以看出,Laravel默认的文件系统驱动是local,也就是本地驱动,默认的云存储是Amazon S3。我们可以修改这些默认配置。

所有支持的驱动及驱动详细配置定义在disks配置项中,在local驱动中使用root配置指定文件系统的根路径,即storage/app,这意味着如果使用local驱动,所有文件都会存放在该目录下。如果使用ftp驱动需要指定FTP主机、用户名和登录密码,此外还有一些额外配置,比如端口号、超时时间、加密方式等。同理使用s3或者rackspace也要填写相应的配置项。

由于我们使用local驱动,所以这里我们保持该配置文件不变即可。

2、基本使用

下面我们使用文件系统演示如何上传文件、获取文件、以及删除文件,我们将使用Storage门面提供的方法进行操作。

上传文件/获取文件

这里我们基于 HTTP 请求实例教程#上传文件这篇教程并对其上传方法postFileupload进行修改:

  1. public function postFileupload(Request $<a href="/tags.php/request/" target="_blank">request</a>){
  2.     //判断请求中是否包含name=file的上传文件<br> 
  3.     if(!$request->hasFile('file')){<br> 
  4.         exit('上传文件为空!');<br> 
  5.     }  
  6.     $file = $request->file('file');<br> 
  7.     //判断<a href="/tags.php/%CE%C4%BC%FE%C9%CF%B4%AB/" target="_blank">文件上传</a>过程中是否出错<br> 
  8.     if(!$file->isValid()){
  9.         exit('文件上传出错!');
  10.     } 
  11.     $newFileName = md5(time().rand(0,10000)).'.'.$file->getClientOriginalExtension();
  12.     $savePath = 'test/'.$newFileName;
  13.     $bytes = Storage::put(
  14.         $savePath,
  15.         file_get_contents($file->getRealPath())
  16.     ); 
  17.     if(!Storage::exists($savePath)){<br> 
  18.         exit('保存文件失败!');
  19.     } //phpfensi.com 
  20.     header("Content-Type: ".Storage::mimeType($savePath));
  21.     echo Storage::get($savePath);

在上传处理逻辑中我们先保存文件到指定位置,然后判断保存后的文件是否存在,如果不存在则表明上传失败,否则显示上传文件内容。

比如我们测试上传图片,访问http://laravel.app:8000/request/fileupload,点击“选择文件”上传一张图片。

Tags: Laravel 5 1

分享到: