livetyping/hermitage

RESTful图片服务器

v0.1.3 2016-05-30 17:15 UTC

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-SignatureX-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文件。