作者:亚艾元技术部
帮客户搭建一个内部文件管理系统,使用到Drupal的私有文件。Drupal的文件分两种形式,公开的,私有的;私有的,有完善的权限控制体系。
私有文件机制的启用,设置settings.php,并且修改它的权限,让对应目录可写。
$settings['file_private_path'] = '/home/www/privatefile';
这个时候,在文件系统的配置里面:/admin/config/media/file-system
可以看到私有文件系统路径的设置,设置成功了。
但是在默认的下载方式里面,还是只有:
公共本地文件送达网络服务器。
这一个选项。
我检查了一下这个页面对应的代码:
$options = $this->streamWrapperManager->getDescriptions(StreamWrapperInterface::WRITE_VISIBLE); if (!empty($options)) { $form['file_default_scheme'] = [ '#type' => 'radios', '#title' => t('Default download method'), '#default_value' => $config->get('default_scheme'), '#options' => $options, '#description' => t('This setting is used as the preferred download method. The use of public files is more efficient, but does not provide any access control.'), ]; }
实际这个目录已经可以写入,但是还是没有找到。我清除了一下缓存,重新回到文件系统配置页面:/admin/config/media/file-system:
这个时候多了一个配置选项:
由Drupal提供的本地私有文件。
选中它。来到Media类型的配置管理界面:/admin/structure/media
分别配置文件、图片字段的设置,设置页面
/admin/structure/media/manage/file/fields/media.file.field_media_file/storage
这里将上传目录改为私有文件目录。
修改nginx的配置,
location ~* \.(txt|log)$ { deny all; }
去掉这里的txt,我用来测试的txt文件就可以访问了。