fusic/filebinderからの移行
このパッケージはfusic/filebinderを置き換えます。プラグイン名、設定、保存されるデータ、URLは変わりません。変わったのは一部の動作で、主にS3のストレージとloaderです。
修正の一覧はCHANGELOGを参照してください。
移行の手順
パッケージを入れ替えます。
bash
composer remove fusic/filebinder
composer require pieceofcake2/filebinderS3のストレージを使っている場合は、S3クライアントのプラグインもインストールします。AsyncAwsを使う場合は次のとおりです。
bash
composer require pieceofcake2/async-aws async-aws/simple-s3AWS SDK for PHPを使う場合は次のとおりです。
bash
composer require pieceofcake2/awsCakePlugin::load('AsyncAws')かCakePlugin::load('Aws')でプラグインを読み込みます。S3クライアントのインストールを参照してください。
次に、Filebinder.S3.key、Filebinder.S3.secret、Filebinder.S3.regionに書いていた認証情報とリージョンを、プラグインのAsyncAwsかAwsの設定に移します。IAMロールなどのデフォルトの認証情報を使ってもかまいません。古い設定も動作し、プラグインの設定より優先されますが、非推奨です。クライアントの設定を参照してください。
S3のストレージ
- S3のストレージには、pieceofcake2/async-awsかpieceofcake2/awsが必要です。プラグインをインストールし、
CakePlugin::load()で読み込んでください。AWS SDKだけでは使えません。 - クライアントのプラグインがないと、S3にファイルを保存するときに
FilebinderS3StorageExceptionが発生します。以前は、ビヘイビアがファイルをローカルに保存し、アップロードしないままafterSave()がfalseを返していました。 Filebinder.S3.keyとFilebinder.S3.secretがなくても、ビヘイビアはプラグインの設定の認証情報か、デフォルトの認証情報でファイルをアップロードします。以前はアップロードしませんでした。- フィールドの
regionを、そのフィールドのすべてのS3リクエストで使います。 - アップロード中にS3でエラーが起きると、SDKの元の例外が発生します。
- S3から復元したファイルに
fileModeを設定します。 - S3に置くファイルの
Content-Typeは、ファイルの内容から決まります。以前のAWS SDKでは拡張子から決まっていました。
LabelヘルパーのS3のURL
S3オプションで出力するS3のURLは、S3クライアントが組み立てます。URLはhttpsで、設定のリージョンやエンドポイントを使います。たとえば、http://<bucket>.s3.amazonaws.com/...だったURLがhttps://<bucket>.s3.<region>.amazonaws.com/...になります。sslオプションは使わなくなりました。- S3のURLには、S3クライアントのプラグインが必要です。バケットがなければURLは
nullになります。 - S3のURLには、フィールドのバケット、
urlPrefix、リージョンを使います。 - フィールドのACLか
Filebinder.S3.aclがprivateなどの非公開のACLなら、URLは署名付きになります。
loader
- loaderのURLのキーは、
Security.saltを使ったHMACになりました。署名にはセッションとファイル名も含まれます。loaderによるファイルの保護を参照してください。 - 移行前に作られたloaderのURLは使えなくなります。有効期間は
Filebinder.expireで決まり、デフォルトでは1分と短いので、そのURLを表示しているページを再読み込みしてください。 - URLは、それを出力したセッションでだけ使えます。
- モデルIDが
0のアップロードされたファイルについては、loaderはtmpディレクトリの中のファイルだけを送ります。 Content-Dispositionヘッダーでは、引用符で囲んだファイル名から引用符と制御文字を取り除きます。ファイル名全体はfilename*に入れます。- loaderは、どのブラウザにもファイルを添付ファイルとして送ります。以前はMSIEにだけ、Shift_JISのファイル名を付けてinlineで送っていました。
- loaderは
X-Content-Type-Options: nosniffを送ります。
コンテンツタイプとバリデーション
file_content_typeは、アップロードされたファイルの内容から判定します。そのため、保存される値とcheckContentTypeが調べる値が、ブラウザが送ったタイプと違うことがあります。funcCheckFileは、ファイルが存在しないと関数を呼ばずに失敗します。'1mb'のように小文字の単位で書いたファイルサイズを、その単位どおりに解釈します。以前はキロバイトとして解釈していました。
削除された設定と非推奨の設定
| 設定 | 状態 |
|---|---|
Filebinder.secret | 使わなくなりました。設定から削除してください。 |
LabelヘルパーのsessionKey | 使わなくなり、指定しても無視します。 |
Filebinder.S3.key、Filebinder.S3.secret | 非推奨。プラグインの設定かデフォルトの認証情報を使ってください。 |
Filebinder.S3.region | 非推奨。プラグインの設定でregionを指定してください。 |
