如何制作允许我从MySQL数据库下载文件的PHP脚本。
我有一个名为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文件下载到我的硬盘?
答案 0 :(得分:7)
这是处理blob文件时遇到的最常见问题。从您的示例中,我可以看到您正在保存" fileType"作为文件的扩展名(即' jpg'用于图片,' pdf'用于pdf文件等),您正在上传。但是,您可以将文件类型保存为MIME内容类型。
假设您上传了jpeg图像 - MIME类型将存储在" fileType"作为" image / jpeg"。类似地,对于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的完整代码。
答案 1 :(得分:0)
您可以使用会话和发布文件名和文件内容来下载页面
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;