在Drupal 8中删除内容文件

时间:2018-07-02 06:30:12

标签: drupal-7 drupal-8

我在删除Drupal 8上的文件时遇到问题。如何删除任何类型的文件,例如我的图片文件(jpg,png等)。在Drupal 7中,您可以在右侧选择Delete the file,但是Drupal 8没有该选项...仅适用于已发布的页面。如果您不再想要文件而又没有任何复杂的任务,那么是否有机会出于任何原因删除文件?

P.S:我是Drupal的初学者! 谢谢

3 个答案:

答案 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;
}