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

3zwtqj6y  于 2023-08-02  发布在  PHP
关注(0)|答案(2)|浏览(119)

我如何制作一个PHP脚本,让我从MySQL的数据库中下载文件。我有一个名为files的表,其中上传的文件保存在基于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文件下载到硬盘驱动器?

oknwwptz

oknwwptz1#

这是处理blob文件时最常见的问题。从你的例子中,我可以看到你正在保存“fileType”作为文件的扩展名(即'jpg'用于图像,'pdf'用于pdf文件等),你正在上传。但是,您可以将文件类型保存为MIME内容类型。
假设你上传了一个jpeg图片,MIME类型将被存储在“fileType”中,作为“image/jpeg”。类似地,对于pdf,它将被存储为“application/pdf”。我设计了这样的代码来从数据库下载blob文件。我假设文件已经上传到您创建的数据库表中。

数据库表“uploads”

| 文件名称|文件类型|文件大小|文件数据|用户ID| userID |

download.php

<?php
$connection =  mysqli_connect("localhost","root"," ",your_database);

$id = 1;

$query = "SELECT * FROM uploads WHERE userID = ?";
$result = $connection->execute_query($query, [$id]); 
list($id, $file, $type, $size, $content) = mysqli_fetch_array($result);
header("Content-length: $size");
header("Content-type: $type");
header("Content-Disposition: attachment; filename=$file");
echo $content;

字符串
你可以找到blob-upload here的完整代码。

kadbb459

kadbb4592#

您可以使用会话和发布文件名和文件内容来下载页面

session_start();
$_SESSION['filename'] = $filename
$_SESSION['file'] = $file
<a href="download.php">echo "Download File"</a>

字符串
并在download.php中使用此代码

session_start();
$filename = $_SESSION['filename'];
$file = $_SESSION['file'];
header("Content-Disposition: attachment; filename=$filename");
ob_clean();
flush();
echo $file;

相关问题