Os arquivos gerenciados serão excluídos se nenhuma entrada correspondente existir em file_usage?

9

Estou usando o módulo de serviços para implementar uma API REST. Um recurso permite POSTs com arquivos enviados. Durante uma função de pré-processo de serviços, salve o arquivo no diretório temp. Durante uma função de pós-processo de serviços, movo o arquivo para um diretório privado, chamo file_usage_add e salvo a entidade host. Quando ocorre um erro de validação entre salvar o arquivo temporário e movê-lo para um local permanente, não excluo explicitamente o arquivo temporário. Eu pensei que o drupal cron cuidaria disso para mim, já que nenhuma entrada para esse arquivo existe em file_usage. No entanto, não parece que o cron esteja cuidando disso para mim. Alguma idéia de por que isso é?

Ao revisar file_managed, vejo o arquivo temporário que gostaria de excluir. Ao revisar file_usage, não vejo nenhum registro correspondente.

Atualização - Uma informação adicional: na maioria dos casos, o arquivo está realmente ausente. Acredito que isso se deva à reinicialização do sistema operacional, limpando o diretório / tmp. Independentemente disso, o system_cron ainda removeria a entrada gerenciada por arquivo de um arquivo se o arquivo real não fosse mais encontrado?

Esse problema surgiu desde que comecei a enviar arquivos de um aplicativo móvel nativo. O nome do arquivo é o mesmo a cada upload. Há alguns casos em que o nome do arquivo temporário não existe no diretório / tmp, mas ainda existe um registro em file_managed com um URI desse nome de arquivo. Portanto, estou recebendo um erro de integridade quando a tabela file_managed está sendo salva. Pretendo atualizar o aplicativo para criar um nome de arquivo aleatório. Enquanto isso, eu gostaria de limpar o banco de dados e a lógica "cola" envolvente que gerencia esses arquivos. Se system_cron vai fazer tudo por mim, então ótimo. Mas pelo que sei, o system_cron não está removendo registros antigos, completamente não utilizados (e não referenciados) no file_managed.

lkiss80
fonte

Respostas:

8

Drupal exclui automaticamente arquivos temporários em system_cron () .

Os arquivos permanentes que não possuem file_usage não são excluídos, no entanto.

Berdir
fonte
Isso foi o que eu pensei. No entanto, as entradas em file_managed ainda estão por aí, mesmo que nenhuma entrada correspondente exista em file_usage e nenhum arquivo real exista mais. Eu devo estar faltando alguma coisa aqui ...
lkiss80
3
@ lkiss80 O arquivo não será excluído, a menos que tenha statuszero na file_managedtabela
Clive
4
Além disso, deve ter mais de 6 horas.
Berdir
@Clive - Obrigado. Sua resposta me levou a verificar novamente o bit de status. Referenciei originalmente um livro que inverteu incorretamente o significado desse bit. Obrigado novamente!
Lkiss80