PHP LongBlob上传/下载不适用于图片

Posted

技术标签:

【中文标题】PHP LongBlob上传/下载不适用于图片【英文标题】:PHP LongBlob Upload/Download not working with pictures 【发布时间】:2017-11-07 11:45:21 【问题描述】:

我必须在我的数据库中存储大量文档,并且我设法使它与 PDF 一起使用。 例如,当我尝试上传 JPG 或 GIF 时,当我从下面的下载功能重新下载时,内容没有显示。

下载功能:

    public function downloadFile($id) 
    if($id!=null)
    $sql = "SELECT * FROM document WHERE id = ?";
    $stmt = $this->db->prepare($sql);
    $stmt->bindValue(1, $id);
    $stmt->execute();
    foreach ($stmt as $row) 
      header("Content-length:".$row['taillefichier']);
      header("Content-type:" . $row['typefichier']);
      header("Content-Disposition: attachment; filename=".$row['nomfichier']);
      echo $row['fichier'];
    
  

【问题讨论】:

“例如,当我尝试上传 JPG 或 GIF 时,重新下载时内容没有显示。” - 问题是;是否有任何内容上传到 db 开始?你也在检查错误吗? ...如果有内容发送到数据库,与文件源相比大小是多少? 是的,我可以从 mysql Blob 字段下载它,但是我的 php 下载功能似乎不起作用,使用下载功能后尝试打开它时总是显示内容错误,大小MySQL表的size字段为209942,blob字段为205000 查看php.net/manual/en/function.error-reporting.php 和php.net/manual/en/pdo.error-handling.php 以及我在上面留下的其他评论是否有任何内容 我已经编辑了我的评论答案!错误报告似乎没有向我展示特别的东西 【参考方案1】:

所以我找到了我自己问题的答案,我会在这里发布更新的功能

    public function downloadFile($id) 
    if($id!=null)
    $sql = "SELECT * FROM document WHERE id = ?";
    $stmt = $this->db->prepare($sql);
    $stmt->bindValue(1, $id);
    $stmt->execute();
    foreach ($stmt as $row) 
      header("Content-length:".$row['taillefichier']);
      header("Content-type:".$row['typefichier']);
      header("Content-Disposition: attachment; filename=".$row['nomfichier']);
      header("Content-type:".$row['typefichier']);
      ob_clean();
      flush();
      echo $row['fichier'];
    
  

在此处查看更多信息:https://***.com/a/31318718/7295677

【讨论】:

以上是关于PHP LongBlob上传/下载不适用于图片的主要内容,如果未能解决你的问题,请参考以下文章

move_uploaded_file() php 函数不适用于多次上传

验证不适用于引导文件上传

如何从保存为 longblob 文件的 sql 数据库中添加图片作为背景图像属性?

php后台商品添加,需要两个表单,一个用于提交上传图片,一个用于提交商品数据到数据库。

PHP佳音高清图片上传下载源码

PHP怎样上传图片以及预览图片?