Don’t forget to subscribe to our YouTube channel to stay up-to-date.
In Drupal, files can be uploaded to the site for users to view or download. This can be easily achieved by creating a file or image field on content types.
In the back end, a list of all the files uploaded can be viewed by the administrator, by going to Administration > Content > Files (admin/content/files).
Files uploaded can be easily removed from the individual content pages (see the image below), but removing them entirely from the system is another story. You might be surprised that you cannot find a button, a link or an option to remove these deleted files entirely from the system.
After deleting files on content, if you go to the Files (admin/content/files) page, you will find the deleted files are still there, and the status still shows ‘Permanent’, even though they are already removed from the nodes. It seems very confusing. Removing files from content and removing files from the system are two different things in Drupal.
To remove files from the system, we need to add the file delete function. This can be achieved by installing the File Delete module.
The File Delete module adds the ability to delete files from within the administration menu.
To download the module run the following Composer command:
composer require drupal/file_delete
How to Configure
After installing the module, we need to add a ‘Delete link’ to the Files page. We can do that by going to Administration > Structure > Views and edit the views of the Files list. By default, the name of the views is ‘Files’:
To add the ‘Delete link’, we need to add a field called ‘Link to delete File’ in this views, which appears like the following image:
Select this field. We can keep everything by default, and then click ‘apply’ and save the views. Next, go to Administration > Content > Files, and there we shall see the ‘delete’ link there, like the following:
How to Use
With this ‘delete link’, we can remove the delete files from the system by clicking on the ‘delete link’ shown in the above diagram. Note that Drupal will protect all the files, and will not allow files to be deleted when they are being used in any content. If you try to delete a file which is still being used in a node, you will see this following error message.
The Tricky Part
In some cases, even if you have deleted the files from the nodes, and the files are no longer visible in the nodes, you might still find this error message disallowing you to remove the file from the system.
But that might be correct because these files might still be used in content. The nodes where these files came from might have more than one revision. These files removed from the current revision might still be attached to the previous revisions.
When this happens, check out the nodes again for multiple revisions, like the following example:
Only when all attachments (including the old revisions) are cleared, then these files can really be removed from the system. So in summary, when we delete the files, we need to make sure that these files are not being used in any content, including the old revisions.
The File Status
Even though you can successful remove deleted files from the system using the ‘Delete link”, you will still find the following:
- The file is still on the list
- The status of the file is changed from ‘Permanent’ to ‘Temporary’
- The file is used in 0 places (that means it is not used with any nodes)
Following is an example how it will look like:
But why do these deleted files showing ‘temporarily’ status still appear in the list? Here is why …
In fact, the files removal process has already been initiated. Drupal will delete the file in the following sequence:
- Change the status from ‘Permanent’ to ‘Temporary’
- Wait for a minimum of 6 hours
- Upon the next cron-run after 6 hours, the system will really remove these temporary files
That is why you still see these deleted files in the list within this 6-hour period. This is how Drupal manages temporary files.
Temporary File Management
If you go to Administration > Configuration > Media > File system, you will find a configuration and explanation at the bottom of the page:
Here it says temporary files will be deleted in the next cron run after 6 hours. Note that 6 hours is the minimum. This ‘6 hours’ setting can be changed, but 6 hours is already the minimum. See the following options for the configuration:
With the ‘Media’ module, files can also be added as media documents instead of a ‘File’ field. These files added as media documents can also be deleted, but it will be a little bit different in the operation. Again, the system will not allow deleting files that are still being used.
To delete such files added as media entities, pay attention to the following:
- Confirm that the media is not being used on the site first.
- Go to Administration > Content > Media to the list of media entities, and delete the designated items here first.
- Next go to Administration > Content > Files, and then delete the designated files here.
It will go through the 6-hour cycle described above, but we should leave it to the system to handle it from here.
The Files list is within the administration area, accessible by the administrator. But if other users will require access to this area to delete the files, user permissions need to be configured specifically to this module.
If you use Drush, you can delete files straight away using the “drush entity:delete” command.
drush entity:delete file ID
This command will remove the file from the Files page and delete it from the file system and you won’t have to wait.
The file delete procedure in Drupal is not that user-friendly. The module provides the ability to delete files in Drupal. The procedure for deleting files is a little bit complicated, due to the fact that files can be used therefore associated with different entities in the system. Also, for this reason, it is suggested that file delete be handled by an experienced administrator with the right permission and access to the administration area.