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

相关文章
|
3月前
|
缓存 JSON JavaScript
Webpack 传递给 Loader 的原始内容是一个 UTF-8 格式编码的字符串
本文详细介绍了Webpack中Loader的概念及其重要性。Webpack仅支持处理JS和JSON文件,而对于CSS、图片等其他类型文件,则需要Loader来转换。文章列举了多种常见Loader,如css-loader、style-loader、babel-loader等,并提供了具体配置示例。此外,还介绍了如何自定义Loader,包括初始化项目、实现基本功能及处理异步操作等内容。通过本文,读者可以全面了解Loader的作用及其实现方法。
31 3
原生php实现自定义表单(支持基本类型+file类型(单文件上传))
原生php实现自定义表单(支持基本类型+file类型(单文件上传))
|
6月前
|
JSON 前端开发 JavaScript
JS前端读取本地上传的File文件对象内容(包括Base64、text、JSON、Blob、ArrayBuffer等类型文件)
JS前端读取本地上传的File文件对象内容(包括Base64、text、JSON、Blob、ArrayBuffer等类型文件)
|
JavaScript 前端开发 Java
Java http Post下载Excel文件 xxx.xlsx 失败解决,及传输文件类型ContentType对应关系
查询数据库生成Excel下载功能。本来很简单的功能却搞了挺久的,主要因为下载的文件打不开,且此功能已是基本功能。这里记录下来方便后面查阅。 ContentType对应的文件关系查看下面连接 https://www.runoob.com/http/mime-types.html
308 0
|
存储 安全 Android开发
【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表文件格式 | 头文件 数据格式 | 全局字符串池 数据格式 | 包数据 数据格式 | 包头 数据格式 )(二)
【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表文件格式 | 头文件 数据格式 | 全局字符串池 数据格式 | 包数据 数据格式 | 包头 数据格式 )(二)
309 0
【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表文件格式 | 头文件 数据格式 | 全局字符串池 数据格式 | 包数据 数据格式 | 包头 数据格式 )(二)
|
存储 Android开发 数据格式
【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表文件格式 | 头文件 数据格式 | 全局字符串池 数据格式 | 包数据 数据格式 | 包头 数据格式 )(一)
【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表文件格式 | 头文件 数据格式 | 全局字符串池 数据格式 | 包数据 数据格式 | 包头 数据格式 )(一)
242 0
【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表文件格式 | 头文件 数据格式 | 全局字符串池 数据格式 | 包数据 数据格式 | 包头 数据格式 )(一)
|
XML JSON 数据格式
解析如何读取json文件数据并转换为xml并保存起来
解析如何读取json文件数据并转换为xml并保存起来
380 0
解析如何读取json文件数据并转换为xml并保存起来