{"id":14983745,"url":"https://github.com/groovili/restuploaderbundle","last_synced_at":"2025-08-18T11:03:44.023Z","repository":{"id":62512858,"uuid":"114768316","full_name":"groovili/RestUploaderBundle","owner":"groovili","description":"A Symfony bundle to handle file upload and management for REST API.","archived":false,"fork":false,"pushed_at":"2019-11-17T13:09:17.000Z","size":75,"stargazers_count":7,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-18T11:02:24.014Z","etag":null,"topics":["file-upload","php","php7","rest-api","symfony-bundle","symfony3"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/groovili.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-12-19T13:28:04.000Z","updated_at":"2023-07-29T12:55:04.000Z","dependencies_parsed_at":"2022-11-02T13:02:30.827Z","dependency_job_id":null,"html_url":"https://github.com/groovili/RestUploaderBundle","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/groovili/RestUploaderBundle","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/groovili%2FRestUploaderBundle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/groovili%2FRestUploaderBundle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/groovili%2FRestUploaderBundle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/groovili%2FRestUploaderBundle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/groovili","download_url":"https://codeload.github.com/groovili/RestUploaderBundle/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/groovili%2FRestUploaderBundle/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270982194,"owners_count":24679447,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-18T02:00:08.743Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["file-upload","php","php7","rest-api","symfony-bundle","symfony3"],"created_at":"2024-09-24T14:07:51.937Z","updated_at":"2025-08-18T11:03:43.316Z","avatar_url":"https://github.com/groovili.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RestUploaderBundle\n[![Latest Stable Version](https://poser.pugx.org/groovili/rest-uploader-bundle/v/stable)](https://packagist.org/packages/groovili/rest-uploader-bundle)\n[![Total Downloads](https://poser.pugx.org/groovili/rest-uploader-bundle/downloads)](https://packagist.org/packages/groovili/rest-uploader-bundle)\n[![License](https://poser.pugx.org/groovili/rest-uploader-bundle/license)](https://packagist.org/packages/groovili/rest-uploader-bundle)\n\nA **Symfony bundle** for file upload and management **for REST API**.\n\nProvides `File` entity, `rest_uploader.manager`,`rest_uploader.validator` services, `RestFileType` and list of **events to subscribe**:\n1. `rest_uploader.file.preUpload`\n2. `rest_uploader.file.postUpload`\n3. `rest_uploader.file.preDownload`\n4. `rest_uploader.file.preDelete`\n5. `rest_uploader.file.preGetPath`\n\nExamples can be found in examples section below.\n\n## Installation\n\nRequire the `groovili/rest-uploader-bundle` package in your **composer.json** and update your dependencies.\n\n    composer require groovili/rest-uploader-bundle\n\nAdd the **RestUploaderBundle** to your application's kernel:\n\n```php\n    public function registerBundles()\n    {\n        $bundles = [\n            // ...\n            new Groovili\\RestUploaderBundle\\RestUploaderBundle(),\n            // ...\n        ];\n        // ...\n    }\n```\n\nPlease notice that `csrf_protection` should be `false` to use **RestFileType**.\n\n## Configuration\n\nThe `public_dir` and `private_dir` are path strings from **app** folder.\nIf not exist, would be added automatically. This parameters should be only strings.\n\n`allowed_extensions` is array of strings with allowed file extensions.\n\n`file_max_size` is integer number in MB, which would be maximum limit.\n\nConfiguration which provided below is default for this bundle:\n\n```yaml\n    rest_uploader:\n        public_dir: '../web/files'\n        private_dir: '../private'\n        allowed_extensions: []\n        file_max_size: 25\n```\n\n## Examples\n\nRestFileType for file upload \n\n```php\n\u003c?php\n    /** @var @UploadedFile $upload */\n    $upload = $request-\u003efiles-\u003eget('file');\n    \n    if (isset($upload)) {\n        $form = $this-\u003ecreateFormBuilder()\n            -\u003eadd('file', RestFileType::class, [\n                'allow_delete' =\u003e true,\n                'validate_extensions' =\u003e true,\n                'validate_size' =\u003e true,\n                'private' =\u003e false,\n            ])\n            -\u003egetForm();\n    \n        $form-\u003ehandleRequest($request);\n        $clearMissing = $request-\u003egetMethod() != 'PATCH';\n        $form-\u003esubmit(['file' =\u003e $upload], $clearMissing);\n    \n        $data = $form-\u003egetData();\n    \n        if (isset($data['file'])) {\n            /** @var File $file */\n            $file = $data['file'];\n            $em = $this-\u003egetDoctrine()-\u003egetManager();\n            $em-\u003epersist($file);\n            $em-\u003eflush();\n        }\n     }\n```\n\nRestFileType submit of existing entity\n\n```php\n\u003c?php\n    /**\n    * $file = ['file' =\u003e ['id' =\u003e 8]]\n    */\n    $file = json_decode($request-\u003egetContent(), true);\n    \n    $form = $this-\u003ecreateFormBuilder()\n        -\u003eadd('file', RestFileType::class, [\n            'allow_delete' =\u003e true,\n            'validate_extensions' =\u003e true,\n            'validate_size' =\u003e true,\n            'private' =\u003e false,\n        ])\n        -\u003egetForm();\n\n    $form-\u003ehandleRequest($request);\n    $clearMissing = $request-\u003egetMethod() != 'PATCH';\n    $form-\u003esubmit($file , $clearMissing);\n```\n\nRestFileType delete of existing entity\n\n```php\n\u003c?php\n    /**\n    * $file = ['file' =\u003e ['id' =\u003e 8, 'delete' =\u003e true]]\n    */\n    $file = json_decode($request-\u003egetContent(), true);\n    \n    $form = $this-\u003ecreateFormBuilder()\n        -\u003eadd('file', RestFileType::class, [\n            'allow_delete' =\u003e true,\n            'validate_extensions' =\u003e true,\n            'validate_size' =\u003e true,\n            'private' =\u003e false,\n        ])\n        -\u003egetForm();\n\n    $form-\u003ehandleRequest($request);\n    $clearMissing = $request-\u003egetMethod() != 'PATCH';\n    $form-\u003esubmit($file , $clearMissing);\n    \n    $em = $this-\u003egetDoctrine()-\u003egetManager();\n    $em-\u003eflush();\n```\n\nUpload and validate file via service\n\n```php\n\u003c?php\n    /** @var @UploadedFile $upload */\n    $upload = $request-\u003efiles-\u003eget('file');\n    \n    if (isset($upload)) {\n        $validator = $this-\u003econtainer-\u003eget('rest_uploader.validator');\n        $uploader = $this-\u003econtainer-\u003eget('rest_uploader.manager');\n        \n        if ($validator-\u003eisExtensionAllowed($upload) \u0026\u0026 $validator-\u003eisSizeValid($upload)){\n            /** @var File $file */\n            $file = $uploader-\u003eupload($upload, false);\n        }\n     }\n```\n\nAdd bundle routing to your **routing.yml**\n\n```yaml\nfile:\n    resource: '@RestUploaderBundle/Resources/config/routing.yml'\n    type: yaml\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgroovili%2Frestuploaderbundle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgroovili%2Frestuploaderbundle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgroovili%2Frestuploaderbundle/lists"}