使用 thumbor 为 AWS 提供缩略图服务

什么是 Amazon S3?

Amazon Simple Storage Service(Amazon S3)是一种对象存储服务,提供行业领先的可扩展性、数据可用性、安全性和性能。各种规模和行业的客户都可以使用 Amazon S3 存储和保护任意数量的数据,用于数据湖、网站、移动应用程序、备份和恢复、归档、企业应用程序、IoT 设备和大数据分析。Amazon S3 提供了管理功能,使您可以优化、组织和配置对数据的访问,以满足您的特定业务、组织和合规性要求。

服务接入AWS S3 做云存储

AWS S3 和国内的七牛云一样,我们在项目中很容易接入,下面以 Laravel 框架简单介绍下接入

依赖包 github.com/aws/aws-sdk...

json 复制代码
{
    "require": {
        "aws/aws-sdk-php-laravel": "~3.0"
    }
}

配置

在 config/aws.php 配置好相关参数

php 复制代码
'credentials' => [
    'key'    => env('AWS_ACCESS_KEY_ID', ''),
    'secret' => env('AWS_SECRET_ACCESS_KEY', ''),
],
'region'    => env('AWS_REGION', 'us-east-1'),
'version'   => 'latest',
'bucket'    => env('AWS_BUCKET', ''),
'ua_append' => [
    'L5MOD/'.AwsServiceProvider::VERSION,
],
'extra' => [
    'rekognition' => [
        'credentials' => [
            'key'    => env('AWS_FACE_LIVENESS_KEY_ID', ''),
            'secret' => env('AWS_FACE_LIVENESS_SECRET_KEY', ''),
        ],
        'bucket'    => env('AWS_FACE_LIVENESS_BUCKET', ''),
        'region'    => env('AWS_FACE_REGION', 'us-east-1'),
        'version'   => 'latest',
        'ua_append' => [
            'L5MOD/'.AwsServiceProvider::VERSION,
        ],
    ],
],

在 config/filesystems.php 配置好文件系统的驱动

dart 复制代码
's3' => [
    'driver' => 's3',
    'key'    => env('AWS_ACCESS_KEY_ID'),
    'secret' => env('AWS_SECRET_ACCESS_KEY'),
    'region' => env('AWS_REGION'),
    'bucket' => env('AWS_BUCKET'),
    'url'    => env('IMAGE_UPLOAD'),
],

使用

ini 复制代码
$img  = $request->file('image');
$path = $img->storeAs($imagePath, $fileName, 's3');

以上将图片上传到S3之后,我们在平台看到对应路径的图片

thumbor 介绍 www.thumbor.org/

thumbor是一个小型的图片处理服务,具有缩放、裁剪、翻转、滤镜等功能。thumbor使用python语言开发,内部可以支持Graphicsmagic(pgmagick), OpenCV, PIL (Python Image Library)等图片处理引擎

安装

复制代码
pip install thumbor

创建用户

bash 复制代码
groupadd thumbor
useradd -g thumbor -s /sbin/nologin thumbor

配置文件

bash 复制代码
mkdir -p /etc/thumbor
thumbor-config > /etc/thumbor/thumbor.conf

启动

bash 复制代码
systemctl status thumbor
2systemctl enable thumbor

Thumbor AWS

Thumbor AWS 这个扩展可以把Thumbor后端跟Amazon S3整合起来。在url上提交图片文件的key,Thumbor的后端会从Amazon S3中取出文件做处理。

源项目地址:https://github.com/thumbor-community/aws/

关键点:我们在缩略图路由做处理,调整默认格式为我们需要的格式

tc_aws/result_storages/s3_storage.py

python 复制代码
def getImagePath(request, config):
    '''
    @description: replace image path
    '''
    size = str(request.width if request.width else "") + "x" + str(request.height if request.height else "")

    if request.fit_in:
        thumb_type = "!t"
    elif request.trim:
        thumb_type = "!c"
    else:
        thumb_type = "!t"

    return config.TC_AWS_RESULT_STORAGE_ROOT_PATH + str(request.image_url) + str(thumb_type) + size + str(".webp" if request.accepts_webp else request.extension)

满足需求之后,安装为我们的本地插件

bash 复制代码
`pip install -e git+https://code.*****.com/thumbor7-tc-aws.git#egg=tc_aws`

在 nginx 层将缩略图的路由,转发到thumbor 服务,即可生成需求尺寸的缩略图,插件这边会将生成的缩略图按路径上传到S3

大功告成!

相关推荐
CopyLower18 分钟前
在 Spring Boot 中实现 WebSockets
spring boot·后端·iphone
.生产的驴1 小时前
SpringBoot 封装统一API返回格式对象 标准化开发 请求封装 统一格式处理
java·数据库·spring boot·后端·spring·eclipse·maven
景天科技苑1 小时前
【Rust】Rust中的枚举与模式匹配,原理解析与应用实战
开发语言·后端·rust·match·enum·枚举与模式匹配·rust枚举与模式匹配
追逐时光者2 小时前
MongoDB从入门到实战之Docker快速安装MongoDB
后端·mongodb
方圆想当图灵2 小时前
深入理解 AOP:使用 AspectJ 实现对 Maven 依赖中 Jar 包类的织入
后端·maven
豌豆花下猫2 小时前
Python 潮流周刊#99:如何在生产环境中运行 Python?(摘要)
后端·python·ai
嘻嘻嘻嘻嘻嘻ys2 小时前
《Spring Boot 3 + Java 17:响应式云原生架构深度实践与范式革新》
前端·后端
异常君2 小时前
线程池隐患解析:为何阿里巴巴拒绝 Executors
java·后端·代码规范
mazhimazhi2 小时前
GC垃圾收集时,居然还有用户线程在奔跑
后端·面试
Python私教2 小时前
基于 Requests 与 Ollama 的本地大模型交互全栈实践指南
后端