加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

如何在PHP中从MySQL数据库下载基于blob的文件?

发布时间:2020-12-13 21:50:37 所属栏目:PHP教程 来源:网络整理
导读:我如何制作一个允许我从 MySQL数据库下载文件的 PHP脚本. 我有下表命名文件,其中上传的文件保存在基于BLOB的字段中. +-------+----------+----------+------------+-------------------+--------+|fileID | fileName | fileType | fileSize |fileData | user
我如何制作一个允许我从 MySQL数据库下载文件的 PHP脚本.
我有下表命名文件,其中上传的文件保存在基于BLOB的字段中.

+-------+----------+----------+------------+-------------------+--------+
|fileID | fileName | fileType | fileSize   |fileData           | userID |
+-------+----------+----------+------------+-------------------+--------+
| 1     | file1    | JPEG     | 211258     |[BLOB - 206.3 KiB] | 1      |
| 2     | file2    | PNG      | 211258     |[BLOB - 201.3 KiB] | 1      |
+-------+----------+----------+------------+-------------------+--------+

我无法找到一种方法来调用文件下载,每次尝试时,我都会得到文件的二进制数据,例如随机数和符号.

我已经尝试过这个查询,其中参数传递(fileID,fileName,fileType)到download.php页面:

$id = mysqli_real_escape_string($link,$_GET['fileID']);
$name = mysqli_real_escape_string($link,$_GET['fileName']);
$type = mysqli_real_escape_string($link,$_GET['fileType']);

$SELECT = "SELECT * FROM files WHERE fileID = $id AND fileName = $name ";
$result = mysqli_query($SELECT,$link);
$result = mysqli_fetch_assoc($result);

header("Content-type: $type");  
echo $result['fileData'];

但是这导致了一个没有输出的空白页面.

如何将file1作为JPEG文件下载到我的硬盘?

解决方法

这是处理blob文件时遇到的最常见问题.从您的示例中,我可以看到您将“fileType”保存为文件的扩展名(即图像的“jpg”,pdf文件的“pdf”等),您正在上传.但是,您可以将文件类型保存为MIME内容类型.

假设您上传了一个jpeg图像 – MIME类型将作为“image / jpeg”存储在“fileType”中.类似地,对于pdf,它将存储为“application / pdf”.我设计了这样的代码从数据库下载blob文件.我将假设文件已经上传到您创建的数据库表中.

数据库表“上传”

| fileID | fileName | fileType | fileSize | fileData | userID |

的download.php

<?php
$connection =  mysqli_connect("localhost","root"," ",your_database)
               or die('Database Connection Failed');
mysqli_set_charset($connection,'utf-8');

$id = 1;

// Use a prepared statement in production to avoid SQL injection;
// we can get away with this here because we're the only ones who
// are going to use this script.
$query = "SELECT * " ."FROM uploads WHERE userID = '$id'";
$result = mysqli_query($connection,$query) 
       or die('Error,query failed');
list($id,$file,$type,$size,$content) = mysqli_fetch_array($result);
header("Content-length: $size");
header("Content-type: $type");
header("Content-Disposition: attachment; filename=$file");
ob_clean();
flush();
echo $content;
mysqli_close($connection);
exit;

?>

你可以找到blob-upload here的完整代码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读