【问题标题】:How to open a file from db in php如何在php中从db打开文件
【发布时间】:2015-03-31 05:58:21
【问题描述】:

我创建了一个个人资料页面来查看成员信息,其中一个信息是他/她的简历。我可以管理查看具有打开或下载选项的窗口,但我有两个问题:

1- 在 Chrome 打开选项中没有出现我只有下载选项。

2- 我无法在 chrome 和 Firefox 中打开或下载 cv,文件名与服务器名称一起出现在打开或保存窗口中。

这是我的代码: PHP:

if(isset($_GET['cv'])) 
 {
   $id = $_GET['cv'];

   $query = "SELECT `fileName`, `fileType`, `fileSize`, `fileContent` FROM `boardteam` WHERE `nationalID` = '$id'";

    $r = mysql_query($query) or die('Error, query failed');

    list($fname, $ftype, $fsize, $fcontent) = mysql_fetch_array($r);
    header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
    header("Content-Disposition: attachment; filename=$fname");
    header('Content-Length: ' . filesize($fsize));
    ob_clean();
    flush(); 
    readfile($fname);
    exit;
}

HTML:

<a href='browseMember.php?cv=<?php echo $member_id?>'>
<?php 
     $q = "SELECT `fileName`, `fileType`, `fileSize`, `fileContent` FROM `boardteam` WHERE `nationalID` = '$member_id'";

     $r = mysql_query($q) or die('Error, query failed');

     list($fname, $ftype, $fsize, $fcontent) = mysql_fetch_array($r);
     if ($fname)
       {
         echo "click here to open member CV";
       }
?>
</a>

更新:

假设 cv 文件类型为 docx,如果可行,我将切换到 case doc 和 pdf 并更改内容类型。

【问题讨论】:

标签: php mysql


【解决方案1】:

这是因为您的内容类型设置。当它是二进制文件时,您的浏览器不知道用哪个应用程序打开文档。尝试使用更具描述性的内容类型更改内容类型,让浏览器选择适当的应用程序。例如,对于 PDF,它将是 application/x-pdf。其他人请参阅MIME Media type directory

【讨论】:

  • 我将它更改为 doc 文件的 application/msword 但它仍然打开一个下载窗口:(
  • 是doc还是docx? docx 文件是 gzip 文件。先用 PDF 试试看是否可行。
  • 我允许 doc、docx 和 pdf,即使现在我也没有按我的意愿工作我在浏览会员资料中尝试了 pdf mime 内容类型,他的简历是 pdf 格式,它仍然给我一个窗口来选择在哪里下载那个pdf :(
  • 我无法打开任何 pdf 和 docx 版本,它说它已损坏,并且窗口中显示的文件名是服务器名称,你能猜到错误吗?
【解决方案2】:

您是否正在寻找这样的东西:

既然你只想在浏览器中打开它,它应该适合你。

请将YOUR_DIRECOTRY_WHERE_FILE_IS_PRESENT_PHYSICALY 替换为您的文档文件实际存在的目录名称。

您的 browseMember.php 代码将如下所示:

<?php
if(isset($_GET['cv'])) 
 {
    $id = $_GET['cv'];

    $query = "SELECT `fileName`, `fileType`, `fileSize`, `fileContent` FROM `boardteam` WHERE `nationalID` = '$id'";

    $r = mysql_query($query) or die('Error, query failed');

    while ($rowDoc = mysql_fetch_array($r)){ ?>
    <div id="wrapper">
        <div><a href="YOUR_DIRECOTRY_WHERE_FILE_IS_PRESENT_PHYSICALY/<?=$rowDoc['fileName']; ?>" target="_blank" class="text_2" style="text-decoration:none;" ><strong><? echo($row_pdf['fileName']);?></strong></a></div>
    </div>
<?php
echo "<br />";
        }
    }
?>

【讨论】:

  • 即使我添加了 case "docx": $ctype="application/vnd.openxmlformats-officedocument.wordprocessingml.document";休息;它仍然询问在哪里下载:"(
  • 查看编辑后的答案。您应该以这种方式使用您的代码。
  • 我将 CV 存储在 db 中而不是系统文件中!
  • 我还想为用户启用(打开 CV 和下载)这两个选项。
  • 但是简历应该在物理上存在还是不存在? :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-08
  • 2023-03-10
  • 2018-07-28
  • 2016-05-26
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多