ats/resource-bundle

ATS 资源包

安装: 22

依赖者: 0

建议者: 0

安全: 0

类型:symfony-bundle


README

一般

为启用 Symfony 的 Web 应用程序提供开发者友好的文件上传/下载功能。

设置

  1. 在您的应用程序中安装此包
    $ php composer require ats/resource-bundle
    
  2. 注册以下参数

    • upload_dir,这将是根上传目录
    • allowed_upload_subdirectories,可以是一个子目录数组(例如 ['foo','bar']),或者如果不需要子目录限制,则为 ~
  3. 在 AppKernel 中注册以下包

    <?php
    class AppKernel extends Kernel
    {
     public function registerBundles()
     {
         $bundles = [
             // production-enabled bundles...
             new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(),
             new ATS\ResourceBundle\ATSResourceBundle(),
         ];
     }
     // ...
    }
    
  4. 将路由定义添加到您的 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

用法

以下端点被暴露

  1. 文件上传: POST /api/resource
    • 参数
    • file:应是一个上传的文件
    • subdir(可选):提供上传子目录
  • 示例输出
    {
      "id": "5c40598b4e05a91c291641e7",
      "name": "b4d77cf414cb32ba7c161aa48333fd996a3af15f.srt",
      "mime_type": "text/plain",
      "size": "67507"
    }
    
  1. 文件下载: 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
      

常见问题解答

  1. 我的上传目录可以从我的 Web 服务器公开访问,我如何确保我的资源只能通过我的 API 端点访问?一种可能的方法是在 Web 服务器级别限制访问,如下面的 nginx 配置片段所示
location /uploads {
  deny all;
  return 404;
}

请注意,这不会影响 API 端点如何访问上传目录,因为文件获取是在文件系统级别直接完成的。