内容类型(ContentType)与文件扩展名(Extension)相互映射

简介:

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,如需转载请自行联系原作者

相关文章
|
Web App开发
chrome扩展:manifest.json文件相关字段
chrome扩展:manifest.json文件相关字段
64 0
|
存储 安全 Android开发
【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表混淆 | resources.arsc 资源映射表二进制格式分析 | 混淆全局字符串池和资源名称字符串池 )
【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表混淆 | resources.arsc 资源映射表二进制格式分析 | 混淆全局字符串池和资源名称字符串池 )
438 0
【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表混淆 | resources.arsc 资源映射表二进制格式分析 | 混淆全局字符串池和资源名称字符串池 )
|
7月前
如何快速提取出一个文件里面全部指定类型的文件的全部路径
该文介绍了如何使用一个工具进行文件批量复制。工具可以从百度网盘(提取码:qwu2)或蓝奏云(提取码:2r1z)下载。打开工具后切换到第五模块,使用Ctrl+5快捷键进入文件批量复制功能。点击“搜索添加”,选择要搜索的文件夹(如PS文件夹),勾选搜索全部子文件,然后开始搜索。搜索完成后,会显示所有结果。
|
7月前
|
JSON 前端开发 JavaScript
JS前端读取本地上传的File文件对象内容(包括Base64、text、JSON、Blob、ArrayBuffer等类型文件)
JS前端读取本地上传的File文件对象内容(包括Base64、text、JSON、Blob、ArrayBuffer等类型文件)
|
存储 Android开发 数据格式
【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表文件格式 | 头文件 数据格式 | 全局字符串池 数据格式 | 包数据 数据格式 | 包头 数据格式 )(一)
【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表文件格式 | 头文件 数据格式 | 全局字符串池 数据格式 | 包数据 数据格式 | 包头 数据格式 )(一)
250 0
【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表文件格式 | 头文件 数据格式 | 全局字符串池 数据格式 | 包数据 数据格式 | 包头 数据格式 )(一)
|
存储 安全 Android开发
【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表文件格式 | 头文件 数据格式 | 全局字符串池 数据格式 | 包数据 数据格式 | 包头 数据格式 )(二)
【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表文件格式 | 头文件 数据格式 | 全局字符串池 数据格式 | 包数据 数据格式 | 包头 数据格式 )(二)
320 0
【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表文件格式 | 头文件 数据格式 | 全局字符串池 数据格式 | 包数据 数据格式 | 包头 数据格式 )(二)
|
XML JSON 数据格式
解析如何读取json文件数据并转换为xml并保存起来
解析如何读取json文件数据并转换为xml并保存起来
388 0
解析如何读取json文件数据并转换为xml并保存起来