【问题标题】:Showing file icons based on file extension根据文件扩展名显示文件图标
【发布时间】:2016-12-06 12:47:06
【问题描述】:

我正在制作一个上传文件的表格:文件、名称、扩展名(在连接到 ms sql 服务器的 php 中)。

我想根据扩展名为每个文件添加一个图标。我认为有 3 个选项可以实现这一目标:

  1. 最好 - 以某种方式加载用户默认图标并以某种方式将它们与我的文件联系起来
  2. 很好 - 从某些网页图标列表中加载,并以某种方式将它们与我的文件连接起来
  3. 不好 - 将一些图标放入我的文件夹并从该文件加载

我知道如何执行第三个选项,但我不能只搜索 10 个图标,因为我的文件夹中总会有一个扩展名(比如 jpeg 与 jpg 不同)。

你能告诉我如何做一些比 3 更好的解决方案吗?可以是PHP,也可以是JS/jQuery,没关系。

【问题讨论】:

    标签: javascript php jquery file icons


    【解决方案1】:

    您必须通过对未知类型的文件使用默认图标来执行此操作。

    您可以在表格中显示文件

    HTML

    <tr>
    <td class="fm fm_file">
    <a  target="_blank" href="./download.php?f=something">yourfile.jpg</a>
    </td>
    </tr>
    

    执行此操作的代码片段(更大库的片段)

    PHP

    if ($handle = opendir($directory)) {
                while (false !== ($entry = readdir($handle))) {
                    if ($entry != "." && $entry != "..") {
                        if (!is_dir($directory . DIRECTORY_SEPARATOR . $entry)) {
                            $md = rand(0, 9) . substr(md5('download' . $entry), 1, 10) . rand(1000, 9999);
                            $dlink = '<a  target="_blank" href="./download.php?f=' . $entry . '&c=' . $md . '" >' . $entry . '</a>';
                            $editlink='';
                            $a=explode('.', $entry);
    
                            if(in_array(strtolower(array_pop($a)),array('ini','txt','xml','bin','sql')))
                            $editlink='<a  href="filemanager-edit?dir=' . $subdir.'&f=' . $entry . '&c=' . $md . '" >' . $ledit . '</a>';
                            $filelist.='<tr>' . '<td class="fm fm_file">' . $dlink . '</td>' . '<td class="edit">'.$editlink.'</td>' . '<td class="delete"><a  href="filemanager?action=delete&dir=' . $subdir.'&f=' . $entry . '&c=' . $md . '" >' . $ldelete . '</a></td>' . '</tr>';
                        } else
                            $filelist.='<tr>' . '<td class="fm ft_folder"><a  href="filemanager?action=view&dir=' . $subdir . $entry . '&c=' . md5($entry) . '" >' . $entry . '</a></td>' . '<td class="edit"></td>' . '<td class="edit"><a  href="filemanager?action=view&dir=' . $subdir . $entry . '&c=' . md5($entry) . '" >' . $lchoose . '</a></td>' . '</tr>';
                    }
                }
                closedir($handle);
            }
    

    分配图标需要使用js

    JavaScript

    $('.fm_file').each(function(){
           var name=$(this).find('a').html().split('.').pop();
         $(this).addClass('ft_'+name);
       });
    

    css 中图标文件的快捷方式

    CSS

    .fm_file{
        background-image:url(../../images/filemanager/page_white.png);
    }
    
    .ft_folder{
        background-image:url(../../images/filemanager/folder.png);
    }
    
    .ft_pdf{
        background-image:url(../../images/filemanager/page_white_acrobat.png);
    }
    
    .ft_cs{
        background-image:url(../../images/filemanager/page_white_csharp.png);
    }
    
    .ft_xls{
        background-image:url(../../images/filemanager/page_white_excel.png);
    }
    
    .ft_php{
        background-image:url(../../images/filemanager/page_white_php.png);
    }
    .ft_dll{
        background-image:url(../../images/filemanager/page_white_dll.png);
    }
    .ft_exe,.ft_msi{
        background-image:url(../../images/filemanager/page_white_exe.png);
    }
    .ft_db,.ft_sql{
        background-image:url(../../images/filemanager/page_white_db.png);
    }
    .ft_png,
    .ft_jpg,
    .ft_bmp,
    .ft_gif{
        background-image:url(../../images/filemanager/page_white_picture.png);
    }
    
    .ft_txt,
    .ft_js,
    .ft_ini,
    .ft_bat,
    .ft_css{
        background-image:url(../../images/filemanager/page_white_text.png);
    }
    
    .ft_htm,
    .ft_xml,
    .ft_html{
        background-image:url(../../images/filemanager/page_white_code.png);
    }
    
    .ft_rar,
    .ft_zip{
        background-image:url(../../images/filemanager/page_white_compressed.png);
    }
    

    结果:

    如果有人使用未知类型,则使用类 fm_file 的图像。 你总是可以组成一组图标

    【讨论】:

      【解决方案2】:

      不幸的是,我认为这样做没有简单的方法,选项 3 是唯一真正可行的解决方案。

      我使用了与@MayankPandeyz 类似的解决方案,但对我们的图标库使用FontAwesome 并使用switch 语句来选择文件扩展名。我发现switch 阅读起来更整洁,更易于维护。

      PHP

      function getFileType(string $url):string{
          $filename=explode('.',$url);
          $extension=end($filename);
      
          switch($extension){
              case 'pdf':
                  $type=$extension;
                  break;
              case 'docx':
              case 'doc':
                  $type='word';
                  break;
              case 'xls':
              case 'xlsx':
                  $type='excel';
                  break;
              case 'mp3':
              case 'ogg':
              case 'wav':
                  $type='audio';
                  break;
              case 'mp4':
              case 'mov':
                  $type='video';
                  break;
              case 'zip':
              case '7z':
              case 'rar':
                  $type='archive';
                  break;
              case 'jpg':
              case 'jpeg':
              case 'png':
                  $type='image';
                  break;
              default:
                  $type='alt';
          }
      
          return $type;
      }
      

      HTML

      <?php $url='http://example.com/downloads/file.pdf'; ?>
      <div class="card blogLink-bottom download-wrapper">
          <div class="card-img-top img-fluid"> <i class="fas fa-file-<?php echo getFileType($url); ?>"></i></div>
          <div class="card-body blue-bg">
              <h4 class="card-title bold"><?php the_title(); ?></h4>
              <a href="<?php echo $url; ?>" class="btn btn-primary" download><span>Download</span></a>
          </div>
      </div>
      

      这是我们的输出示例:

      【讨论】:

        【解决方案3】:

        试试这样的:

        if(ext == 'jpg' || ext == 'jpeg')
        {
            $image_name = 'image.jpg';  
        }
        if(ext == 'doc' || ext == 'docx')
        {
            $image_name = 'doc.jpg';    
        }
        

        为未知图标创建一个 else

        【讨论】:

        • 有很多扩展可以做这样的事情。这就是为什么我写第三个解决方案是不好的解决方案:/
        【解决方案4】:

        由于您的数据库表中已经有了扩展名,接下来的逻辑步骤是将所有常见的文件扩展名连同对相应图标的引用加载到一个数组中。

        然后使用in_array 测试扩展并加载正确的图标。

        您可以获得许多不同样式的文件类型的图标集。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-12
          • 1970-01-01
          相关资源
          最近更新 更多