evil-corp / cakephp-awss3upload
CakePHP 的 AwsS3Upload 插件
v1.0.3
2020-11-24 15:32 UTC
Requires
- cakephp/cakephp: ^3.4
- josegonzalez/cakephp-upload: ^4.0
- league/flysystem-aws-s3-v3: ^1.0
Requires (Dev)
- phpunit/phpunit: ^5.7|^6.0
This package is auto-updated.
Last update: 2024-09-24 23:48:01 UTC
README
此插件通过提供的 behavior,可以快速将 Table 中的文件上传到 AWS S3 桶。
变更日志
日期:2020-11-24
- 修复了 behavior 中的 deprecated 警告
日期:2019-03-25
- 修复了将文件作为纯文本上传到 S3 的错误
日期:2018-11-20
- 添加了在相同表中删除文件的功能
日期:2018-10-11
- 重新编写了文档
文档
功能
实现
- 包含一个 behavior,用于上传文件到配置的 s3 桶,名为 AwsS3Upload,具有以下功能:
- 上传文件到配置的 s3 桶
- 在数据库中存储元数据字段以及文件的完整 URL。
- 允许轻松配置要上传的文件为仅图像
- 提供多个预配置验证器以便快速集成
- 允许切换以本地上传文件
- 删除表格中文件的方法,而不删除整个行。
待办事项
- 允许同时配置多个桶
安装
要使用 composer 获取插件,需要在 composer.json
中添加以下内容:
- 向
"require"
对象添加插件:"evil-corp/cakephp-awss3upload": "dev-master"
- 向
"repositories"
数组添加对象:`
{"type": "vcs", "url": "git@bitbucket.org:evil-corp/cakephp-awss3upload.git"}`
- 运行
composer update
注意:请确保在存储库中具有正确的访问/部署权限。
插件安装到存储库后,可以将 behavior 添加到必要的表格中
$this->loadBehavior('EvilCorp/AwsS3Upload.AwsS3Upload', [
/* Nombre del campo principal, donde se guardará el nombre del archivo: */
'avatar_file_name' => [
/* Estos campos se almacenarán en la base de datos: */
'fields' => [
/* campos requeridos: */
'dir' => 'avatar_file_dir', //el directorio del archivo
'size' => 'avatar_file_size', //el tamaño del archivo en bytes
'type' => 'avatar_file_type', //el mime type del archivo
'url' => 'avatar_url', //la dirección completa del archivo una vez subido
/* campos opcionales usados para imagenes: */
'image_width' => 'avatar_width', //ancho de la imagen
'image_height' => 'avatar_height' //alto de la imagen
],
/* si el campo se configura como images_only,
se agregará validación para asegurar que solo se suban imagenes
*/
'images_only' => true
]
]);
结构
EvilCorp\AwsS3Upload\Model\Behavior\AwsS3UploadBehavior
- public initialize(array $config)
- 检查必要的配置变量是否存在且正确
- 构建并配置客户端以与 S3 交互
- 为所有在模型中配置的字段添加 s3 适配器和默认路径
- 处理字段配置后,将 'Josegonzalez/Upload.Upload' behavior 添加到 Table 并传递
- public buildValidator(Event $event, Validator $validator, $name)
- 为每个配置的字段添加标准的文件类型验证规则
- 包括以下规则
- fileUnderPhpSizeLimit
- fileUnderFormSizeLimit
- fileCompletedUpload
- fileFileUpload
- fileSuccessfulWrite
- 此外,如果字段配置为
['images_only' => true]
,则添加 mimeType 验证,仅接受以下类型- image/gif
- image/png
- image/jpg
- image/jpeg
- public afterRules(Event $event, EntityInterface $entity, ArrayObject $options, $result, $operation)
- 如果配置了宽度和高度,尝试从文件中获取这些属性并填充这些字段
- public beforeSave(Event $event, EntityInterface $entity, ArrayObject $options)
- 将上传到 S3 的文件的完整 URL 存储在 url 字段
- 如果正在删除文件,则负责清理相关字段(dir, type, size 等)
- public deleteFile($id, $field)
- 用于删除实体的 $field 的方法。结合 beforeSave,可以调用例如
$this->Products->deleteFile($product_id, 'file_name');
,将删除file_name
的内容和相关字段(例如:file_dir, file_size, file_type 等)。
- 用于删除实体的 $field 的方法。结合 beforeSave,可以调用例如
配置变量
配置变量与应用程序的配置数组一起保存,如其他配置一样(默认为 config/app.php
)。
可用的配置如下
'AwsS3' => [
'base_url' => 'https://s3.amazonaws.com',
'key' => '', //required.
'secret' => '', //required.
'region' => 'us-east-1', //required. region the bucket is it
'bucket' => 'test-bucket-name', //required. name of the bucket
'prefix' => 'path/to/test/prefix' //optional. Appends this path to all s3 object address.
/* Campo opcional. Por defecto false. se puede poner explicitamente
como true para que no se use s3 y en su lugar se almacene localmente.
Util para testing.
*/
'local_only' => false,
]
测试
//待办