在网上看到很多童鞋在问有关drupal文件系统的问题,小编对drupal略知一二,为避免大家分享错误的知识,分享本文前,小编特意参考了有关drupal教程,希望本文的分享对想详细了解drupal文件系统的童鞋有所帮助。

 

Drupal中如何实现自有StreamWrapper

对于自有reamWrapper,我们可以通过下述步骤实现

1. 写一个class,实现DrupalStreamWrapperInterface的接口

2. 实现一个hookhook_stream_wrappers,返回这个StreamWrapper,通知给Drupal

 

Drupal如何调用StreamWrapper来存储文件?

     drupal中,基本上所有上传文件的Field都是通过FileField实现的,FileField管理所有的文件,都记录在Drupalfile_managed表里面,Drupal是通过File Entity来管理(没有装file_entity模块也有这个entity),记录所有的文件以及文件使用情况(file_usage表)。

 

file_managed表包含具体字段,可以通过下图了解:

wKioL1YfVfCiVJ5QAAH5V2QoRPc064.jpg

 

DrupalFileField字段有一个设置,可以选择一个Upload destination,如下图所示:

wKioL1YfVf_xihnQAACyEltd9VI310.jpg

 

在这个列表里面,Drupal调用了hook_stream_wrappers,得到所有的streamwrapper,然后指定一个streamwrapper,该FileField就是使用对应的streamwrapper来操作这里的文件。

 

字段的StreamWrapper修改之后怎么办?

 

如果我们在这个地方修改了StreamWrapper,之前的存储的文件怎么处理?

通过查看file_managed表,我们可以知道,Drupal把存储的所有文件到记录到file_managed表,每一个文件都有一个url,这个URL是带有scheme的,在对文件操作的时候,我们知道文件系统会根据scheme获取当前文件的StreamWrapper类,然后调用具体的StreamWrapper实例来操作这个文件。

也就是说,默认情况下,之前的文件如果你的StreamWrapper文件还能找到(模块没有禁用),之前的文件还会保持在原有的地方,并且不会修改路径。

而当前Content-Type的新的内容,会使用新的StreamWrapper,存储新的URL到数据库。

这个也适用于Field的存储路径有变化,比如之前文件路径存储在mydir1里面,我们设置后修改成mydir2/[date]之类的目录,那么新的文件会变,旧的文件不会变。

      如果想要原有的文件也修改一下路径,把之前所有的文件都按照新的设置的路径来存储怎么办???那就用FileField_Paths模块吧。

 

Drupal里面文件系统选择文件Upload Destination是做什么的?

Drupal里面默认的文件系统,有一个Download Destination的选择,这个是指定一个默认的destionation,再创建新的FileField的时候,默认选择这个。路径是: /admin/config/media/file-system

 

Media模块的作用?

Drupal里面默认有file entity,但是我们还是没办法简单的给File Entity添加的类型(bundle),比如视频、音频、图片、文档等等,Drupal的三方模块File Entity登场了,这个模块扩展了之前的File实体,增加了更多的属性,增加了对filebundle的管理,使File真正成为一个可以管理的的Entity了。

从数据库的角度来看,FileEntityDrupalfile_managed表进行了扩展,添加了一列type,来指定文件类型,如下图所示:

wKiom1YfVezCbtKqAAGsmZSlXaQ584.jpg

File Entity模块是Media模块的一部分,不仅仅Media通过FileEntity扩展了Drupal原有的File EntityMedia模块也增加了对File Entity的管理,所有Drupal里面的Filesfile_managed表)都能通过Drupal的后台简单的管理,使其面可视化,更加方便,具体的可以参考下图:

wKioL1YfVh2zCERgAADS7B4PHdc984.jpg

另外,DrupalMedia模块还增进了Drupalupload系统,上传图片和media的时候,跟Wordpressmedia类似,弹出一个对话框,可以上传新的文件,也可以选择之前的上传的文件,便利性提高了不少,因此Media模块还是值得一试!

 

以上就是drupal文件系统相关功能模块的使用方法,这部分知识非常重要,初学者一定要详细掌握了解哦。