softservlet/file-manager

此软件包最新版本(dev-master)没有提供许可证信息。

dev-master 2014-04-05 13:11 UTC

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);