我在删除Drupal 8上的文件时遇到问题。如何删除任何类型的文件,例如我的图片文件(jpg,png等)。在Drupal 7中,您可以在右侧选择Delete the file,但是Drupal 8没有该选项...仅适用于已发布的页面。如果您不再想要文件而又没有任何复杂的任务,那么是否有机会出于任何原因删除文件?
P.S:我是Drupal的初学者! 谢谢
答案 0 :(得分:1)
在Drupal 8中,不需要该选项,因为有cron会自动运行以删除未使用的图像。
答案 1 :(得分:1)
Drupal 8管理界面中没有原生方法可以从Drupal中的文件上传器中删除图像。但是,您可以安装Drupal 8 IMCE模块,该模块将使您在登录时访问文件系统。这样,您可以删除文件。
此处是该模块的链接。 https://www.drupal.org/project/imce
答案 2 :(得分:0)
您可以从自定义模块中删除图像。这仅在 Drupal 8.9 中进行了测试。首先让我解释一下图像处理过程,以便您更好地了解此解决方案是否适合您。 fid 存储在用于引用图像的自定义表的列中。它是名为 file_managed 的表中的主键,用于存储图像信息。图像存储在“web/sites/default/files”文件夹中。这可能会有所不同,具体取决于您的 Drupal 安装。 table_usage 存储网站上图像的用法。当您擦除图像时,您需要从所有三个表 file_managed、file_usage 和您的表中擦除带有图像的行。然后当然要取消链接您的图片。
/**
* Removes an image.
*
* @param $fid
* @return boolean
*/
public function removeImage($fid) {
if ( empty($fid) || !preg_match('/^[0-9]+$/', trim($fid)) ) return FALSE;
// Im assigning the $this->database property an instance of Connection
$result = $this->database->query("SELECT uri FROM {file_managed} where fid=:fid", [':fid' => $fid])->fetchCol();
$absolute_path = \Drupal::service('file_system')->realpath($result[0]);
if(isset($absolute_path)) unlink($absolute_path);
//var_dump($absolute_path); exit();
$this->database->delete('file_managed')
->condition('fid', $fid)
->execute();
$this->database->delete('file_usage')
->condition('fid', $fid)
->execute();
return true;
}