Photoshop UXP localStorage FileアクセスToken
またまたPhotoshop UXPです。過去にPhotoshop UXPからExtendScriptを無理矢理実行するでstorageとfileSystem Tokenの話題をちょこっと出したのですがもう少し整理しようかと思って今回の記事になります。今回主にローカルのファイルパスを取得してその取得したEntry型のファイルパスをstorageを通して一時的に保存して再度取り出す、という一連の流れとそれに関連した話題になります。
ファイルパスについて
何度も過去に言及している通りUXPにおけるファイルパスはEntry型のオブジェクトとして取得しないと実際にローカルのファイルにアクセスできません(詳しくはPhotoshop UXP tiff,jpegといった決まったフォーマットで保存するの記事参照)
Entry型のファイルパスを一度取得した後にまたダイアログを出して同じパスを取得、というのは面倒です。どうにか再利用しようと思うかもしれませんがどのように保持すれば良いのでしょうか?UXPではブラウザー同様localStorageをサポートしています。試しにvalueとしてパスをセットして再度取り出し、利用してみましょう。
上記のコードは正常に動くのでしょうか?残念ながら動きません。Entry型ファイルパスはキーがSymbol型の独自のオブジェクトなのでこのままstorageに保存、取り出しても普通のオブジェクトになって返ってきます。これはEntry型のファイルとして扱えません。
Persistent Token
しかしUXPにはこのファイルパスにアクセスするためのアクセスTokenを発行する機能があります。UXPではこのTokenをstorageに保存して再度取り出せば既に取得したEntry型のファイルパスにアクセスできます。以下サンプルコード。
createPersistentTokenメソッドにファイルパスを渡す事により該当のファイルパスにアクセスするためのTokenを取得できます。この
TokenをlocalStorageに保存することにより後から目的のEntry型ファイルパスに再度アクセスできます。以下サンプルコード。
localStorageに保存したTokenを取り出してgetEntryForPersistentTokenメソッドでTokenから再度ファイルパスにアクセスできます。同じファイルパスを何度も扱う時に一時的に保存するのに必須となります。おそらくUXPではこのEntry型のパスは一度取得した時にどこかに一時的に保持されているらしく、このTokenを使えばTokenが有効な限りいつでも一度取得したパスを取り出せます。このTokenが具体的にいつまで有効なのかは、ちょっとわかっていません。
SecureStorage
ちなみにUXPでは既存のstorageの他にsecureStorageというものもあります。これは通常のlocalStorageと似たようなstorageですがセキュリティの守られたstorageになります。保存された値は暗号化されるので用途によってはこちらの方が好まれる場合もあるでしょう。
ただ私も今までそこまでセキュリティに気を付け無いといけないようなデータをプラグイン上で扱ったことがないので用途等は思いつきません。後key自体は暗号化されていないので注意してください。