ContentType : 指内容类型,一般指网页中的ContentType,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式,什么编码读取文件。
文件扩展名(Extension):文件扩展名是操作系统用来标示文件格式的一种机制。
通常情况下通过文件扩展名就能大致的推断出文件的内容类型,不过这不是绝对的,因为文件扩展名通常可以人为设置而不会影响到文件的内容类型。
我们可以查看Http ContentType与文件扩展名对照表了解相关对照,还可以了解一下 MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展名。
Web开发中经常与ContentType打交道,了解Tomcat Web容器的话可以在其conf/web.xml查看MIME的映射信息,比如:
1
2
3
4
|
<
mime-mapping
>
<
extension
>png</
extension
>
<
mime-type
>image/png</
mime-type
>
</
mime-mapping
>
|
另外可以查看开源中国提供的Http ContentType 对照表:http://tool.oschina.net/commons
下面说说在开发中遇到的一个问题:
通常情况下我们是通过解析一个文件来获取它的ContentType, 而当Http请求获取文件,从得到的响应信息中获取到ContentType值之后,该以什么样的文件类型保持数据呢?这个时候就得用到ContentType映射Extension。
有一个实际案例,我在使用七牛云存储的时候,上传一个文件("app.png"), 根据上传规则,我需要设置一个key(也就是云存储中的文件名),如果key是一个不带扩展的名的文件名,那么我在应用程序中做一次请求(http://secondriver-dev.qiniudn.com/1399965230092)的时候,该以什么样的扩展名来保存这个文件,当然即使保存文件不设置扩展名,对于文件的内容没有影响,只是在打开文件的时候需要选择打开文件的应用程序。
下面将开源中国提供的Http ContentType对照表提取出来,做成Java类。
参见附件: MIME文件,Extension与ContentType(使用时去掉 .txt后缀)。
下面是通过PHP脚本解析MIME,来提取其中的Extension=ContentType对。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
<?php
$file
=
'MIME.txt'
;
$resource
=
fopen
(
$file
,
'r'
);
$i
=0;
$extension_array
=[];
$contenttype_array
=[];
$map
=[];
while
(false!=(
$string
=
fgets
(
$resource
))){
$array
=
explode
(
" "
,
$string
);
$result
=validate_array(
$array
);
if
(!
$result
){
echo
'存在不合格的字符串'
;
}
else
{
$e1
=trim(
$array
[0]);
$c1
=trim(
$array
[1]);
$e2
=trim(
$array
[2]);
$c2
=trim(
$array
[3]);
$map
[
$e1
]=
$c1
;
$map
[
$e2
]=
$c2
;
$extension_array
[
$i
]=
$e1
;
$contenttype_array
[
$i
]=
$c2
;
$extension_array
[
$i
+1]=
$e2
;
$contenttype_array
[
$i
+1]=
$c2
;
}
$i
=
$i
+2;
}
var_dump(
$map
);
echo
"<hr/>"
;
print_array(
$extension_array
);
echo
"<hr/>"
;
print_array(
$contenttype_array
);
function
print_array(
$array
){
for
(
$i
=0,
$length
=sizeof(
$array
);
$i
<
$length
;
$i
++){
echo
'"'
.
$array
[
$i
].
'"'
;
if
(
$i
!=
$length
-1){
echo
", "
;
}
}
}
function
validate_array(
$array
){
if
(sizeof(
$array
)!=4){
return
false;
}
else
{
foreach
(
$array
as
$key
=>
$value
) {
if
(
$value
===
" "
){
return
false;
}
}
return
true;
}
}
echo
'<h1>一共'
.
$i
.
'条映射</h1>'
;
fclose(
$resource
);
?>
|
通过上面PHP代码解析MIME文件,就可以根据具体需要来使用Extension与ContentType映射。
本文转自 secondriver 51CTO博客,原文链接:http://blog.51cto.com/aiilive/1421261,如需转载请自行联系原作者