我们知道,在Web中,一个文件的类型并不取决于它的后缀名,而是取决于它的MIME类型。在使用ownCloud/Nextcloud中,我们有时会上传一些类型不常见的文件,而默认的,ownCloud/Nextcloud并不会识别这个文件,仅仅是把它当作一个未知的文件对待,像下面这样:
这就很难看了……下面我将介绍如何管理ownCloud/Nextcloud上的文件类型。
MIME类型别名
ownCloud/Nextcloud控制MIME类型的文件位于resources/config/mimetypealiases.dist.json
,里面有类似下方的内容。其中,:
左侧的是文件的MIME类型,右侧的是这种类型所对应的图标,这儿我们把它称作别名(Alias)(图标的svg文件位于core/img/filetypes
,这个我们后面说。)
{ "application/coreldraw": "image", "application/font-sfnt": "image", "application/font-woff": "image", "application/illustrator": "image", "application/epub+zip": "text", "application/javascript": "text/code", }
这些内容的作用是:
- 将MIME类型为
application/coreldraw
的Corel Draw文件以及类型为application/font-sfnt
、application/font-woff
、application/illustrator
的图标显示为image(即图标目录下的image.svg) - ePub文件将使用text图标显示
- js文件将使用text-code图标显示
以下几个常用的MIME类型:
Mime类型 | 描述 |
---|---|
image |
常规图片 |
image/vector |
矢量图像 |
audio |
常规音频 |
x-office/document |
Word处理文档 |
x-office/spreadsheet |
电子表格 |
x-office/presentation |
幻灯片 |
text |
常规文本 |
text/code |
源代码 |
自定义文件图标
前面提到了我们可以自己定义不同类型的文件所对应的图标,但是ownCloud/Nextcloud自带的图标较少,只有20个。那么就很有可能发生这种情况:
c++,python,php,js,html,css……这么多不同类型的语言的源码文件都来齐了,然而它们却用的同一个图标,难以分辨。为了解决这个问题,我们可以给它们定义不同的图标。
1.以Python为例,编辑resources/config/mimetypealiases.dist.json
,找到"text/x-python": "text/code",
,将后部的别名text/code
改为text/python
像下面这样:
"text/x-python": "text/python",
2.然后找一个Python的图标,要求为svg格式,重命名为text-python.svg。
[infobox]注意这里的图标文件的命名规范,要和你所设置的类型一致(即与:
后面的别名一致)。比如我将python的别名写成text/python
,那么图标文件的名字就应该是text-python.svg
,即将/
改为-
再加后缀.svg
。同理,如果我要给c++文件填一个图标,别名应该写作:
"text/x-c++src": "text/cpp",
图标应该命名为:text-cpp.svg
[/infobox]
3.将图标上传至core/img/filetypes
目录,注意文件权限的设置,要与目录下已有的文件保持一致。
4.执行OCC命令,更新mimetype别名数据库:
$ sudo -u www-data php occ maintenance:mimetype:update-js mimetypelist.js is updated
5.清一下浏览器缓存,再次访问Nextcloud实例,效果:
同理,可以为其它的类型的文件添加图标:
推荐一个下载各种图标的网站:iconfont。
建立独立的mimetype.json
在ownCloud/Nextcloud更新时,会将mimetypealiases.dist.json
也覆盖掉,使得之前的修改失效。ownCloud/Nextcloud允许我们创建一个独立的 mimetype.json
文件。
将mimetypealiases.dist.json
拷贝为mimetypealiases.json
,并将它放在config/目录下。
MIME类型映射
ownCloud允许管理员将文件扩展名映射到mimetype,例如,将以mp3结尾的文件映射到audio/mpeg,并显示特定的图标。
文件后缀名与MIME类型的映射关系储存在resources/config/mimetypemapping.dist.json
。以下是这个文件内容的一个示例:
{ "3gp": ["video/3gpp"], "7z": ["application/x-7z-compressed"], "accdb": ["application/msaccess"], "ai": ["application/illustrator"], "apk": ["application/vnd.android.package-archive"], "arw": ["image/x-dcraw"], "avi": ["video/x-msvideo"], "bash": ["text/x-shellscript"], "json": ["application/json", "text/plain"], ⇑后缀名 ⇑MIME类型(支持一种后缀对应多种MIME类型) }
例如"json": ["application/json", "text/plain"],
,表明对于后缀名为json的文件,其MIME类型都将定为application/json
和text/plain
。
建立独立的mimetypemapping.json
同样的,为了防止ownCloud/Nextcloud的更新将修改后的文件覆盖掉,我们可以在/config目录下建立mimetypemapping.json:
将resources/config/mimetypemapping.dist.json
拷贝为mimetypemapping.json
,并将它放在config/目录下。