基于Frank de Jonge的PHP包Flysystem,Laravel提供了强大的文件系统抽象。Laravel文件系统集成提供了使用驱动处理本地文件系统的简单使用,这些驱动包括Amazon S3,以及Rackspace云存储。此外在这些存储选项间切换非常简单,因为对每个系统而言,API是一样的。
文件系统配置文件位于config/filesystems.php
。在该文件中可以配置所有”硬盘“,每个硬盘描述了特定的存储驱动和存储位置。为每种支持的驱动的示例配置包含在该配置文件中,所以,简单编辑该配置来反映你的存储参数和认证信息。
当然,你想配置磁盘多少就配置多少,多个磁盘也可以共用同一个驱动。
使用local
驱动的时候,注意所有文件操作相对于定义在配置文件中的root
目录,默认情况下,该值设置为storage/app
目录,因此,下面的方法将会存储文件到storage/app/file.txt
:
Storage::disk('local')->put('file.txt', 'Contents');
在使用Amazon S3或Rackspace驱动之前,需要通过Composer安装相应的包:
league/flysystem-aws-s3-v3 ~1.0
league/flysystem-rackspace ~1.0
Storage
门面用于和你配置的所有磁盘进行交互,例如,你可以使用该门面上的put方法来存储头像到默认磁盘,如果你调用Storage
门面上的方法却先调用disk
方法,该方法调用自动传递到默认磁盘:
<?php
namespace App\Http\Controllers;
use Storage;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class UserController extends Controller{
/**
* 更新指定用户头像
*
* @param Request $request
* @param int $id
* @return Response
*/
public function updateAvatar(Request $request, $id)
{
$user = User::findOrFail($id);
Storage::put(
'avatars/'.$user->id,
file_get_contents($request->file('avatar')->getRealPath())
);
}
}
使用多个磁盘时,可以使用Storage
门面上的disk
方法访问特定磁盘。当然,可以继续使用方法链执行该磁盘上的方法:
$disk = Storage::disk('s3');
$contents = Storage::disk('local')->get('file.jpg')
get
方法用于获取给定文件的内容,该方法将会返回该文件的原生字符串内容:
$contents = Storage::get('file.jpg');
exists
方法用于判断给定文件是否存在于磁盘上:
$exists = Storage::disk('s3')->exists('file.jpg');
size
方法以字节方式返回文件大小:
$size = Storage::size('file1.jpg');
lastModified
方法以UNIX时间戳格式返回文件最后一次修改时间:
$time = Storage::lastModified('file1.jpg');
put
方法用于存储文件到磁盘。可以传递一个PHP资源到put
方法,该方法将会使用Flysystem底层的流支持。在处理大文件的时候推荐使用文件流:
Storage::put('file.jpg', $contents);
Storage::put('file.jpg', $resource);
copy
方法将磁盘中已存在的文件从一个地方拷贝到另一个地方:
Storage::copy('old/file1.jpg', 'new/file1.jpg');
move
方法将磁盘中已存在的文件从一定地方移到到另一个地方:
Storage::move('old/file1.jpg', 'new/file1.jpg');
prepend
和append
方法允许你轻松插入内容到文件开头/结尾:
Storage::prepend('file.log', 'Prepended Text');
Storage::append('file.log', 'Appended Text');
delete
方法接收单个文件名或多个文件数组并将其从磁盘移除:
Storage::delete('file.jpg');
Storage::delete(['file1.jpg', 'file2.jpg']);
files
方法返回给定目录下的所有文件数组,如果你想要获取给定目录下包含子目录的所有文件列表,可以使用allFiles
方法:
$files = Storage::files($directory);
$files = Storage::allFiles($directory);
directories
方法返回给定目录下所有目录数组,此外,可以使用allDirectories
方法获取嵌套的所有子目录数组:
$directories = Storage::directories($directory);
// 递归...
$directories = Storage::allDirectories($directory);
makeDirectory
方法将会创建给定目录,包含子目录(递归):
Storage::makeDirectory($directory);
最后,deleteDirectory
方法用于移除目录,包括该目录下的所有文件:
Storage::deleteDirectory($directory);
Laravel的Flysystem集成支持自定义驱动,为了设置自定义的文件系统你需要创建一个服务提供者如DropboxServiceProvider
。在该提供者的boot
方法中,你可以使用Storage
门面的extend
方法定义自定义驱动:
<?php
namespace App\Providers;
use Storage;
use League\Flysystem\Filesystem;
use Dropbox\Client as DropboxClient;
use Illuminate\Support\ServiceProvider;
use League\Flysystem\Dropbox\DropboxAdapter;
class DropboxServiceProvider extends ServiceProvider{
/**
* Perform post-registration booting of services.
*
* @return void
*/
public function boot()
{
Storage::extend('dropbox', function($app, $config) {
$client = new DropboxClient(
$config['accessToken'], $config['clientIdentifier']
);
return new Filesystem(new DropboxAdapter($client));
});
}
/**
* Register bindings in the container.
*
* @return void
*/
public function register()
{
//
}
}
extend
方法的第一个参数是驱动名称,第二个参数是获取$app
和$config
变量的闭包。该解析器闭包必须返回一个League\Flysystem\Filesystem
实例。$config变量包含了定义在配置文件config/filesystems.php
中为特定磁盘定义的选项。
创建好注册扩展的服务提供者后,就可以使用配置文件config/filesystem.php
中的dropbox
驱动了。
扩展阅读:实例教程 —— 使用本地驱动实现文件上传、保存、获取、移动和删除
Original url: Access
Created at: 2018-09-29 19:46:30
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论