ats / resource-bundle
ATS 资源包
v1.0.2
2019-04-12 13:35 UTC
Requires
- php: >=7.0
- alcaeus/mongo-php-adapter: ^1.1
- ats/core-bundle: ^1.0
- doctrine/doctrine-bundle: ^1.9
- doctrine/mongodb-odm: ^1.2
- doctrine/mongodb-odm-bundle: ^3.4
- jms/serializer-bundle: ~2.3
- stof/doctrine-extensions-bundle: ^1.3
- symfony/cache: 3.4.*
- symfony/config: 3.4.*
- symfony/console: 3.4.*
- symfony/dependency-injection: 3.4.*
- symfony/event-dispatcher: 3.4.*
- symfony/filesystem: 3.4.*
- symfony/finder: 3.4.*
- symfony/http-foundation: 3.4.*
- symfony/http-kernel: 3.4.*
- symfony/monolog-bundle: ^3.1.0
- symfony/routing: 3.4.*
- symfony/yaml: 3.4.*
Requires (Dev)
- doctrine/doctrine-fixtures-bundle: 3.0.2
- phpstan/phpstan: ^0.10.3
- phpstan/phpstan-symfony: ^0.10.1
- squizlabs/php_codesniffer: ^3.3
- symfony/browser-kit: 3.4.*
- symfony/debug: 3.4.*
- symfony/dom-crawler: 3.4.*
- symfony/framework-bundle: 3.4.*
- symfony/phpunit-bridge: 3.4.*
- symfony/process: 3.4.*
- symfony/var-dumper: 3.4.*
- symfony/web-server-bundle: 3.4.*
Provides
- ext-mongo: *
This package is not auto-updated.
Last update: 2021-09-19 20:23:06 UTC
README
一般
为启用 Symfony 的 Web 应用程序提供开发者友好的文件上传/下载功能。
设置
- 在您的应用程序中安装此包
$ php composer require ats/resource-bundle
注册以下参数
upload_dir
,这将是根上传目录allowed_upload_subdirectories
,可以是一个子目录数组(例如['foo','bar']
),或者如果不需要子目录限制,则为~
在 AppKernel 中注册以下包
<?php class AppKernel extends Kernel { public function registerBundles() { $bundles = [ // production-enabled bundles... new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(), new ATS\ResourceBundle\ATSResourceBundle(), ]; } // ... }
- 将路由定义添加到您的
routing.yml
文件中resource: resource: "@ATSResourceBundle/Controller/Rest/ResourceController.php" type: "annotation" prefix: "/api"
配置
- 在您的配置中包含以下 YAML 节点
stof_doctrine_extensions:
uploadable:
default_file_path: '%uploads_dir%'
mongodb:
default:
uploadable: true
用法
以下端点被暴露
- 文件上传:
POST /api/resource
- 参数
file
:应是一个上传的文件subdir
(可选):提供上传子目录
- 示例输出
{ "id": "5c40598b4e05a91c291641e7", "name": "b4d77cf414cb32ba7c161aa48333fd996a3af15f.srt", "mime_type": "text/plain", "size": "67507" }
- 文件下载:
GET /api/resource/:id
- 参数
- 资源 ID
- 输出:二进制内容,包含文件的 MIME 类型和文件名。
- 示例头信息
accept-ranges →bytes cache-control →public connection →close content-disposition →attachment; filename="fbf824d625885a29b24a3e68fe2348c920714752.xlsx" content-length →65481 content-type →application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
常见问题解答
- 我的上传目录可以从我的 Web 服务器公开访问,我如何确保我的资源只能通过我的 API 端点访问?一种可能的方法是在 Web 服务器级别限制访问,如下面的 nginx 配置片段所示
location /uploads {
deny all;
return 404;
}
请注意,这不会影响 API 端点如何访问上传目录,因为文件获取是在文件系统级别直接完成的。