gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 07:52:37 24 4
gpt4 key购买 nike

我如何制作一个 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 |
+-------+----------+----------+------------+-------------------+--------+

我想不出调用文件下载的方法,每次尝试时,我都会得到文件的二进制数据,例如随机数和符号。

我试过这个查询,其中参数通过(文件 ID、文件名、文件类型)传递到 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 文件。我将假设文件已上传到您创建的数据库表中。

数据库表“上传”

|文件编号 |文件名 |文件类型 |文件大小 |文件数据 |用户ID |

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 .

关于php - 如何在 PHP 中从 MySQL 数据库下载基于 blob 的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21291361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com