nimbusoft / flysystem-openstack-swift
Flysystem adapter for OpenStack Swift
Installs: 600 007
Dependents: 6
Suggesters: 2
Security: 0
Stars: 44
Watchers: 7
Forks: 19
Open Issues: 1
Requires
- php: ^7.4 | ^8.0
- guzzlehttp/psr7: ^2.0
- league/flysystem: ^2.0 | ^3.0
- php-opencloud/openstack: ^3.2
Requires (Dev)
- mockery/mockery: >= 1.3.1
- phpunit/phpunit: ^9.5
- vimeo/psalm: ^4.20
README
Flysystem adapter for OpenStack Swift.
Installation
composer require nimbusoft/flysystem-openstack-swift
Usage
$openstack = new OpenStack\OpenStack([ 'authUrl' => '{authUrl}', 'region' => '{region}', 'user' => [ 'id' => '{userId}', 'password' => '{password}' ], 'scope' => ['project' => ['id' => '{projectId}']] ]); $container = $openstack->objectStoreV1() ->getContainer('{containerName}'); $adapter = new Nimbusoft\Flysystem\OpenStack\SwiftAdapter($container); $flysystem = new League\Flysystem\Filesystem($adapter);
Configuration
The Swift adapter has the following configuration options:
Uploading large objects
See more at openstack documentation
swiftLargeObjectThreshold
: Size of the file in bytes when to switch over to the large object upload procedure. Default is 300 MiB. The maximum allowed size of regular objects is 5 GiB.swiftSegmentSize
: Size of individual segments or chunks that the large file is split up into. Default is 100 MiB. Should be below 5 GiB.swiftSegmentContainer
: Name of the Swift container to store the large object segments to. Default is the same container that stores the regular files.
Content type
contentType
: Sets the Content-Type header of the request.detectContentType
: If set to true, Object Storage guesses the content type based on the file extension and ignores the value sent in the Content-Type header, if present.
File expiration
deleteAfter
: Specifies the number of seconds after which the object is removed. Internally, the Object Storage system stores this value in the X-Delete-At metadata item.deleteAt
: The certain date, in the UNIX Epoch timestamp format, when the object will be removed.
Examples
These options can be set on Filesystem
creation:
$flysystem = new League\Flysystem\Filesystem($adapter, new \League\Flysystem\Config([ 'swiftLargeObjectThreshold' => 104857600, // 100 MiB 'swiftSegmentSize' => 52428800, // 50 MiB 'swiftSegmentContainer' => 'mySegmentContainer', ]));
or per-file:
$flysystem->write($path, $contents, new \League\Flysystem\Config([ 'swiftLargeObjectThreshold' => 52428800, // 50 MiB 'contentType' => 'text/plain', 'deleteAfter' => 3600, // 1 hour ])