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

   ContentType : 指内容类型,一般指网页中的ContentType,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式,什么编码读取文件。

   文件扩展名(Extension):文件扩展名是操作系统用来标示文件格式的一种机制。

 

   通常情况下通过文件扩展名就能大致的推断出文件的内容类型,不过这不是绝对的,因为文件扩展名通常可以人为设置而不会影响到文件的内容类型。

  我们可以查看Http ContentType与文件扩展名对照表了解相关对照,还可以了解一下  MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展名。

 

  Web开发中经常与ContentType打交道,了解Tomcat Web容器的话可以在其conf/web.xml查看MIME的映射信息,比如:

 

<mime-mapping>
        <extension>png</extension>
        <mime-type>p_w_picpath/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对。

    

<?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映射。

文章版权声明

 1 原创文章作者:1994,如若转载,请注明出处: https://www.52hwl.com/34120.html

 2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈

 3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)

 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年7月15日 下午12:55
下一篇 2023年7月15日 下午12:55