livetyping / hermitage
RESTful图片服务器
Requires
- php: >=7.0
- ext-apcu: *
- beberlei/assert: ~2.0
- doctrine/cache: ~1.4
- frostealth/php-shortid-helper: ~1.0
- intervention/image: ~2.3
- league/flysystem: ~1.0
- league/flysystem-aws-s3-v3: ~1.0
- league/flysystem-cached-adapter: ~1.0
- monolog/monolog: ~1.19
- nesbot/carbon: ~1.21
- php-di/slim-bridge: ~1.0
- simple-bus/message-bus: ~2.2
- slim/http-cache: ~0.3
- slim/slim: ~3.4
- vlucas/phpdotenv: ~2.0
Requires (Dev)
- phpro/grumphp: ~0.9
- squizlabs/php_codesniffer: ~2.3
This package is not auto-updated.
Last update: 2024-09-20 21:36:31 UTC
README
你多久需要存储一次用户上传的图片?可能很频繁。将这些图片放入移动应用程序并不简单,因为有许多具有不同参数的设备。Hermitage提供了一个解决方案。
Hermitage是基于Slim的微服务。它为您的客户端和设备提供图像存储、传输和修改服务。Hermitage可以
- 通过简单的REST API获取和放置图像
- 使用本地文件系统或Amazon S3作为存储库。如果需要,您可以轻松编写自己的适配器。
- 将图像放置在预设格式之一。您也可以轻松添加自己的格式!
所有这些功能都是开箱即用的。太棒了!此外,Hermitage非常简单易用。下面的信息将详细介绍这些细节。让我们开始吧!
安装
首先,您需要安装composer库,然后添加配置文件,接着为您的Web服务器创建索引文件,并设置环境变量。您可以通过手动操作或使用预置的骨架(Hermitage Skeleton)来完成,这样就可以跳过本节。
运行Composer命令进行安装
composer require livetyping/hermitage ~0.1
配置文件
您可以将配置放在config/main.php
等位置。
return [ 'root-dir' => dirname(__DIR__), 'storage-dir' => dirname(__DIR__) . '/storage', // your versions 'images.versions' => [ /** * '{version-name}' => [ * 'type' => '{manipulator-name}', * // manipulator options * ], */ 'mini' => [ 'type' => 'resize', 'height' => 200, 'width' => 200, ], 'small' => [ 'type' => 'resize', 'height' => 400, 'width' => 400, ], 'thumb' => [ 'type' => 'fit', 'height' => 100, 'width' => 100, ], ], // parameters for optimization an original image 'images.optimization-params' => ['maxHeight' => 800, 'maxWidth' => 800, 'interlace' => true], 'images.manipulator-map' => [ 'resize' => \livetyping\hermitage\foundation\images\processor\manipulators\Resize::class, 'fit' => \livetyping\hermitage\foundation\images\processor\manipulators\Fit::class, ], 'images.manager-config' => ['driver' => 'gd'], // slim framework settings 'settings.httpVersion' => '1.1', 'settings.responseChunkSize' => 4096, 'settings.displayErrorDetails' => false, ];
环境变量
将.env.example
文件复制到本地.env
文件,并进行配置
cp vendor/livetyping/hermitage/.env.example .env
本地.env
文件如下所示
AUTH_SECRET=changeme
###
# Adapter
##
STORAGE_ADAPTER=local
# AWS S3
#STORAGE_ADAPTER=s3
#STORAGE_S3_REGION=
#STORAGE_S3_BUCKET=
#STORAGE_S3_KEY=
#STORAGE_S3_SECRET=
注意: 将AUTH_SECRET
设置为一些随机字符串。
索引文件
您可以将它放在public/index.php
等位置。
require __DIR__ . '/../vendor/autoload.php'; $sources = new \livetyping\hermitage\app\Sources([ // path to your config __DIR__ . '/../config/main.php', ]); // load environment variables from the `.env` file if it exists livetyping\hermitage\bootstrap\load_dotenv(dirname(__DIR__)); livetyping\hermitage\bootstrap\app($sources)->run();
REST API
Hermitage提供了一个简单的API,您可以通过它上传、下载和删除您的图像。
签名写入请求
要将数据写入Hermitage,用户代理必须通过两个请求头指定:X-Authenticate-Signature
和X-Authenticate-Timestamp
。
X-Authenticate-Signature
类似于访问令牌,是一个HMAC(也使用SHA-256和密钥)。
用于哈希的数据由以下元素生成
- HTTP方法(POST或DELETE)
- URI
- UTC时间戳(仅整数)
这些元素按上述顺序连接,并用|
作为分隔符,然后用密钥生成哈希。以下示例展示了如何使用PHP删除图像
$timestamp = (new DateTime('now', new DateTimeZone('UTC')))->getTimestamp(); $filename = '<filename>'; $secret = '<secret value>'; $method = 'DELETE'; // The URI $uri = "http://hermitage/{$filename}"; // Data for the hash $data = implode('|', [$method, $uri, $timestamp]); // Generate the signature $signature = hash_hmac('sha256', $data, $secret); // Request the uri $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => $url, CURLOPT_CUSTOMREQUEST => $method, CURLOPT_HTTPHEADER => [ 'X-Authenticate-Timestamp' => $timestamp, 'X-Authenticate-Signature' => $signature, ], ]); curl_exec($ch); curl_close($ch);
上传
curl -XPOST http://hermitage --data-binary @<image.jpg> -H "Content-Type: image/jpeg" -H "X-Authenticate-Timestamp: <timestamp>" -H "X-Authenticate-Signature: <signature>"
结果为
{ "filename": "generated/path/to/file.jpg" }
删除
要从Hermitage删除图像,可以通过请求图像的URI并使用HTTP DELETE
来完成。
curl -XDELETE http://hermitage/<filename> -H "X-Authenticate-Timestamp: <timestamp>" -H "X-Authenticate-Signature: <signature>"
获取
获取图像的原始(优化)版本
curl http://hermitage/<filename>
获取图像的另一个版本
curl http://hermitage/<filename>:<version>
其中<version>
是配置文件中图像的版本名称(例如"small","thumb"等)
许可协议
Hermitage采用MIT许可协议。
有关更多信息,请参阅LICENSE文件。