prolix / file-system-bundle
Symfony Kitpages FileSystem Bundle. Abstraction layer for files (local, S3)
Installs: 756
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 4
Type:symfony-bundle
Requires
- php: >=8.2
- symfony/framework-bundle: ^6.0|^7.0
Requires (Dev)
- phpunit/phpunit: 6.5.*
- symfony/browser-kit: ^6.0|^7.0
- symfony/yaml: ^6.0|^7.0
Suggests
- aws/aws-sdk-php: ~3.0
This package is auto-updated.
Last update: 2024-11-03 08:56:32 UTC
README
This is a Symfony2 bundle that provides a filesystem abstraction layer. Basicaly this does the same as the gaufrette library from KnpLabs, but it manages much more efficiently big files. We can manage a 2GB file with a memory limit of 128Mo for the PHP process. We never transfert the entire content in a $content variable.
With this bundle you can save your files on different filesystems (S3, Local filesystem, FTP,...)
Some elements of the configuration system are based on the code of the KnpGaufretteBundle.
Versions
2019-01-23 : v4.0.0
- [new] upgrade to Symfony 2.8, 3.x, 4.x
- [doc] best doc for tests
2018-05-16 : v3.2.1
- [fix] url of the file in the flysystem system for swift
- [fix] fix pb when the file doesn't exist in flysystem adapter
- [fix] fix mime type problem in flysystem adapter
2018-05-15 : v3.2.0
- [new] integration with flysystem
Lot of doc is missing here...
2012-05-24 : v1.0.0
- first stable release
Actual state
This bundle is stable. The adapters are :
- Local adapter : file system of the server
- S3 adapter : for Amazon Web Service AWS S3
- FTP adapter : for FTP access
- FlySystem adapater : for a link to flysystem
Installation
You need to add the following lines in your deps :
Using Composer, just $ composer require kitpages/file-system-bundle
package or:
{ "require": { "kitpages/file-system-bundle": "dev-master" } }
Only if you use AmazonS3
{ "require": { amazonwebservices/aws-sdk-for-php: ~1.5 } }
Only if you use Flysystem
{ "require": { "league/flysystem": "^1.0", "oneup/flysystem-bundle": "^1.14", } }
AppKernel.php
$bundles = array( ... new Kitpages\FileSystemBundle\KitpagesFileSystemBundle(), );
// AWS SDK needs a special autoloader
require_once __DIR__.'/../vendor/aws-sdk/sdk.class.php';
Configuration example
The following configuration defines 3 filesystems :
- kitpagesFile : a local filesystem
- kitpagesAmazon : a filesystem on Amazon S3
- kitpagesFlysystem : another filesystem abstraction
Let's see the configuration in config.yml
kitpages_file_system: file_system_list: kitpagesFile: local: directory_public: %kernel.root_dir%/../web directory_private: %kernel.root_dir% base_url: %base_url% kitpagesAmazon: amazon_s3: bucket_name: %kitpagesFile_amazons3_bucketname% key: %kitpagesFile_amazons3_key% secret_key: %kitpagesFile_amazons3_secretkey% kitpagesFlysystem: flysystem: flysystem_adapter: oneup_flysystem.your_filesystem file_uri_prefix: https://your.custom.url/4687311687643/FRA/
Usage example
// use AdapterFile at the beginning of the file use Kitpages\FileSystemBundle\Model\AdapterFile; // get the adapter $localAdapter = $this->get("kitpages_file_system.file_system.kitpagesFile"); $s3Adapter = $this->get("kitpages_file_system.file_system.kitpagesAmazon"); // private files (without direct public URL) $adapter->copyTempToAdapter("/my_physical_dir/foo.txt", new AdapterFile("bar/foo.txt") ); $adapter->copyAdapterToTemp(new AdapterFile("bar/foo.txt"), "/my_physical_dir/foo.txt" ); // public files (with a direct URL given by the adapter) $adapter->copyTempToAdapter("/my_physical_dir/foo.txt", new AdapterFile("bar/foo.txt", true) ); $url = $adapter->getFileLocation(new AdapterFile("bar/foo.txt", true)); // some functions of the adapter : $adapterFile = new AdapterFile("bar/foo.txt"); $adapter->copyTempToAdapter("/my_physical_dir/foo.txt", $adapterFile ); $content = $adapter->getFileContent($adapterFile); $adapter->sendFileToBrowser($adapterFile); if ($adapter->isFile($adapterFile) ) { // if file exists in the adapter }
Run the tests
cd Tests/app/web
php -S localhost:8888