Files

99 lines
2.7 KiB
PHP

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2021 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: yunwuxin <448901948@qq.com>
// +----------------------------------------------------------------------
declare (strict_types = 1);
namespace think\filesystem\driver;
use League\Flysystem\FilesystemAdapter;
use League\Flysystem\Local\LocalFilesystemAdapter;
use League\Flysystem\PathNormalizer;
use League\Flysystem\PathPrefixer;
use League\Flysystem\UnixVisibility\PortableVisibilityConverter;
use League\Flysystem\Visibility;
use League\Flysystem\WhitespacePathNormalizer;
use think\filesystem\Driver;
class Local extends Driver
{
/**
* 配置参数
* @var array
*/
protected $config = [
'root' => '',
];
/**
* @var PathPrefixer
*/
protected $prefixer;
/**
* @var PathNormalizer
*/
protected $normalizer;
protected function createAdapter(): FilesystemAdapter
{
$visibility = PortableVisibilityConverter::fromArray(
$this->config['permissions'] ?? [],
$this->config['visibility'] ?? Visibility::PRIVATE
);
$links = ($this->config['links'] ?? null) === 'skip'
? LocalFilesystemAdapter::SKIP_LINKS
: LocalFilesystemAdapter::DISALLOW_LINKS;
return new LocalFilesystemAdapter(
$this->config['root'],
$visibility,
$this->config['lock'] ?? LOCK_EX,
$links
);
}
protected function prefixer()
{
if (!$this->prefixer) {
$this->prefixer = new PathPrefixer($this->config['root'], DIRECTORY_SEPARATOR);
}
return $this->prefixer;
}
protected function normalizer()
{
if (!$this->normalizer) {
$this->normalizer = new WhitespacePathNormalizer();
}
return $this->normalizer;
}
/**
* 获取文件访问地址
* @param string $path 文件路径
* @return string
*/
public function url(string $path): string
{
$path = $this->normalizer()->normalizePath($path);
if (isset($this->config['url'])) {
return $this->concatPathToUrl($this->config['url'], $path);
}
return parent::url($path);
}
public function path(string $path): string
{
return $this->prefixer()->prefixPath($path);
}
}