file_usageに対応するエントリが存在しない場合、管理対象ファイルは削除されますか?


9

サービスモジュールを使用してREST APIを実装しています。1つのリソースで、アップロードされたファイルのPOSTが許可されます。サービスの前処理機能中に、ファイルを一時ディレクトリに保存します。サービスの後処理機能中に、ファイルをプライベートディレクトリに移動し、file_usage_addを呼び出して、ホストエンティティを保存します。一時ファイルの保存と永続的な場所への移動の間に検証エラーが発生した場合、一時ファイルを明示的に削除していません。このファイルのエントリがfile_usageに存在しないため、drupal cronがこれを処理してくれると思いました。しかし、cronがこれを処理してくれているようには見えません。これがなぜなのかについての考えはありますか?

file_managedを確認すると、削除したい一時ファイルが表示されます。file_usageを確認したところ、対応するレコードがありません。

更新-追加の情報:ほとんどの場合、ファイルは実際にはありません。これは、OSの再起動により/ tmpディレクトリがクリアされたためと考えられます。いずれにしても、実際のファイルが見つからなくなった場合、system_cronはファイルのfile_managedエントリを削除しますか?

この問題は、ネイティブモバイルアプリからファイルのアップロードを開始してから発生しました。ファイル名はすべてのアップロードで同じです。一時ファイル名が/ tmpディレクトリに存在しない場合がありますが、file_managedのレコードはそのファイル名のURIでまだ存在します。そのため、file_managedテーブルを保存すると、整合性エラーが発生します。アプリを更新してランダムなファイル名を作成する予定です。それまでの間、データベースと、これらのファイルを管理する周囲の「接着」ロジックをクリーンアップしたいと思います。system_cronが私のためにそれをすべて行うなら、それは素晴らしいことです。しかし、私が言えることから、system_cronはfile_managed内の古い、完全に未使用の(および参照されていない)レコードを削除していません。

回答:


8

Drupalはsystem_cron()内の一時ファイルを自動的に削除します。

ただし、file_usageのないパーマメントファイルは削除されません。


私もそう思っていました。ただし、file_usageに対応するエントリがなく、実際のファイルが存在しなくても、file_managedのエントリは依然としてぶらぶらしています。私はここで何かを見逃しているに違いありません...
lkiss80

3
@ lkiss80 テーブルstatusに0 がない限り、ファイルは削除されませんfile_managed
Clive

4
さらに、6時間以上経過している必要があります。
Berdir 2012

@クライヴ-ありがとう。あなたの返答により、ステータスビットを再確認するように求められました。私は当初、このビットの意味を誤って反転させた本を参照しました。再度、感謝します!
lkiss80 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.