softservlet / file-manager
Requires
- php: >=5.3.0
- illuminate/support: 4.1.*
This package is not auto-updated.
Last update: 2024-09-28 16:20:33 UTC
README
简介
此软件包允许您在任何地方存储文件,包括本地文件系统、云CDN、FTP服务器等。
为了实现这一点,需要一个常用的方法来描述文件位置。
假设您有一个存储在 /home/user/image.jpg
的文件
关于这个文件,我们可以说它
- 具有
file
存储模式 - 位于
/home/user/image.jpg
位置
因此,最终,我们可以将其描述为 file:///home/user/image.jpg
总之,任何文件都始终存储在符合以下URI模式的地址中
<schema>://<location>[?<query>][#<fragment>]
例如,如果我们在OpenStack对象存储中存储一个文件,我们可以为它提供以下URI
openstack://4281c348eaf83e70ddce0e07221c3d28
Laravel集成
编辑 app/config/app.php
并添加以下行
'aliases' =>
...
'Storage' => 'Softservlet\FileManager\StorageFacade'
'providers' =>
...
'Softservlet\FileManager\FileManagerServiceProvider'
用法
存储文件
首先,我们将实例化一个新的 FileInterface
实现对象,该对象接受文件接口的URI作为参数。
默认情况下,如果URI不包含方案,则将解释为file://方案
use Softservlet\FileManager\File\GenericFile; //See Softservlet\FileManager\File\FileInterface $file = new GenericFile('/home/user/image.jpg');
然后我们将调用 StorageFactory
类来存储文件(此处使用Storage外观)。
store
方法接受一个 FileInterface
参数,以及可选的 StorageInterface
实例。
如果没有提供 StorageInterface
,文件将使用文件系统存储驱动程序进行存储。
$uri = Storage::store($file);
如果您有OpenStack存储实现,可以调用
$uri = Storage::store($file, new OpenstackStorage)
检索文件
我们已经存储了一个文件,现在我们想从存储机制中检索它。
为此,我们将使用在 StorageInterface
上声明的 fileDescriptor()
方法,该方法由每个存储驱动程序实现。
它接受一个 FileInterface
参数,并返回一个 FileDescriptorInterface
。
//we stored the file and got the $uri variable $file = new GenericFile($uri); $descriptor = Storage::fileDescriptor($file); //See Softservlet\FileManager\File\FileDescriptorInterface $contents = $descriptor->contents(); $mime = $descriptor->mime();
通过http交付文件
要获取访问文件的http URL,您可以使用 DeliveryInterface
的实现。
到目前为止,有一个用于存储在 FilesystemStorage
驱动中文件的实现。
use Softservlet\FileManager\Deliver\LocalHttpDelivery; $file = new GenericFile($uri); $delivery = new LocalHttpDelivery(); $url = $delivery->httpUrl($file);