Webプロジェクトの画像およびその他のバイナリコンテンツを管理する

画像
XIAGでは、さまざまなプロジェクトで常に同じ問題を解決しています。それは、バイナリユーザーデータを保存および表示する方法です。 会社のロゴ、職務内容が記載されたPDFファイル、またはウェルカムビデオを使用できます。 さらに、このコンテンツはサイトのページに最も多様な方法で表示する必要があります:ロゴは適切なサイズのPDFである必要があります-小さなプレビュー画像の形式で、ビデオからはいくつかのフリーズフレームを表示する必要があります。

このタスクはすべてのWeb開発者になじみがあると確信しています。 この記事では、Githubのオープンライセンスで公開されている問題に対するソリューションを共有します。

Barberry Webサービス( https://github.com/Magomogo/Barberry )を確認してください 。これは、約1年間使用されています。 このサービスの本質は、ダウンロードしたドキュメントのオリジナルを保存し、その場で変換してさまざまな方法で提供できることです。

RESTインターフェースを備えたWebサービス


最初の明白な考えは、標準的な問題を解決することは特定のアプリケーションの一部であってはならないということです。 この単純な責任を割り当てることができる独立したサービスが必要です。

Barberryはサーバー上で個別にホストされ、HTTPを介して世界と対話します。 作業中のサービスを試すには、サーバーにhttps://github.com/Magomogo/barberry-serviceをインストールする必要があります。 これはすでに自宅で行っています。サービスのデモンストレーションはhttp://barberry.xiag.chで見ることができます

読み込み中

データをBarberryにアップロードするには、POSTリクエストを行う必要があります。 サービスはContent-Typeを決定し、保存されたドキュメントの一意の識別子を報告します。

curlコマンドを使用してコンソールに写真DSC01823.JPGをロードする例:

$ curl -X POST -F file=@/tmp/DSC01823.JPG barberry.xiag.ch 


 : POST / HTTP/1.1 --  -- : HTTP/1.1 201 Created {"id":"yPkjPk","contentType":"image/jpeg","ext":"jpg","length":218038,"filename":"DSC01823.JPG"} 


JSONサーバーの応答は、受信したドキュメントを記述します。 それへのさらなるアクセスは、ユニークな「id」によって発生します:「yPkjPk」。

荷降ろし

ダウンロードしたドキュメントの識別子は、アプリケーションの側に保存する必要があります。 これはアンロードに使用されます:

 : GET /yPkjPk.jpg HTTP/1.1 : HTTP/1.1 200 OK Content-Type: image/jpeg 


ブラウザウィンドウに画像が表示されます。 特別なことは何もありません。 バーベリーのフルパワーがさらに明らかになります。

オンザフライで変換してキャッシュする


別の形式のドキュメントを要求するとどうなりますか? そのためには、ドキュメント識別子に別の拡張子を追加する必要があります。

 : GET /yPkjPk.gif HTTP/1.1 : HTTP/1.1 200 OK Content-Type: image/gif 


画像が変更され、サービスはJPG-> GIFを変換し、それを私たちに渡します。 変換には、画像の変換を行うbarberry-plugin-imagemagickが使用されました。
要求はさらに複雑になる場合があります。

 : GET /yPkjPk_200x200.gif HTTP/1.1 


元の画像の形式だけでなく、サイズも変更されます。 一般的なケースでは、ドキュメント識別子はプラグインに渡される任意のコマンドであり、プラグインは目的の形式に変換します。

奇妙なものを要求すると、サービスは正しく答えます。

 : GET /yPkjPk.pdf HTTP/1.1 : HTTP/1.1 404 Not Found 


これは、サービスが画像をPDFドキュメントに変換する機能を見つけられなかったことを意味します。 もちろん、このためのプラグインを作成し、Barberryをインストールに接続することを禁止する人はいません。

キャッシングについて。 すべてのGET要求で変換が発生するわけではありません。 Webサーバーは、必要なファイルがキャッシュに見つからなかった場合にのみコンバーターを開始するように構成されています。 この例では、Apacheとその書き換えモジュールを使用しています。

柔軟性


タスクは標準であるという事実にもかかわらず、異なるプロジェクトには独自のニュアンスがあります。 Barberryアーキテクチャでは、特定のプラグインを作成して、データを変換する機能を拡張できます。 たとえば、画像を操作するためのプラグインgithub.com/Magomogo/barberry-plugin-imagemagickの代わりに、独自の画像を作成して、画像上の画像に透かしを追加できます。

だから、バーベリーは非常にエキゾチックな能力を得た:



依存関係の管理は、composerパッケージマネージャーに与えられます。 アプリケーションのbarberryサービスを作成するには、 https://github.com/Magomogo/barberry-serviceをフォークして独自の詳細を追加することをお勧めします。
たとえば、composer.jsonを調べて、必要なプラグインを接続します。 最初は、写真を操作するためのプラグインのみが接続されています。
 "require": { "barberry/barberry": "1.1.*", "barberry/plugin-imagemagick": "1.0.*" } 

機能を拡張するために、他のContent-Typeのドキュメントで機能するプラグインを接続できます。

モニタリング


他のWebアプリケーションと同様に、Barberryは生産モードで監視システムに接続する必要があります。 barberry.xiag.ch/monitoring.phpには、接続されているすべてのプラグインをポーリングし、すべてが正常であるかどうかを報告するスクリプトがあります。

おわりに


実装の詳細の説明は、この投稿の範囲外です。 興味のある方は、Githubのページで協力してください。

Source: https://habr.com/ru/post/J175053/


All Articles