You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将存储为LONG BLOB类型的上传文件还原为普通文件?

从数据库LONG BLOB字段还原文件的方法

首先需要纠正你当前存储文件代码的问题:PHP中文件上传的内容是通过$_FILES数组获取的,而非$_POST,你现在的写法仅存储了文件名,并非文件的二进制内容。正确的存储方式应该读取上传文件的二进制数据后再存入BLOB字段,示例如下:

if (isset($_POST['Apply'])){ 
    $companyname = $_POST['companyname']; 
    $responsiblename = $_POST['responsiblename']; 
    $description = $_POST['editor1']; 
    // 处理上传文件
    $uploadedFile = $_FILES['fileToUpload'];
    // 读取文件二进制内容
    $photos = file_get_contents($uploadedFile['tmp_name']);
    
    // 必须用预处理语句防止SQL注入,禁止直接拼接变量
    $sql = "INSERT INTO leaves(companyname,responsiblename,description,photos)
            VALUES(?,?,?,?)";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$companyname, $responsiblename, $description, $photos]);
}

以下是从LONG BLOB字段还原为普通文件的具体步骤:

步骤1:从数据库读取BLOB数据

通过查询语句获取目标记录的BLOB字段内容:

// 假设使用PDO连接数据库
$pdo = new PDO('mysql:host=localhost;dbname=你的数据库名', '用户名', '密码');

// 根据记录标识查询,比如id
$targetId = 1; // 替换为实际记录ID
$sql = "SELECT photos FROM leaves WHERE id = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$targetId]);
$row = $stmt->fetch(PDO::FETCH_ASSOC);

// 获取BLOB二进制数据
$blobData = $row['photos'];

步骤2:将BLOB数据写入文件

指定保存路径和文件名,将二进制数据写入文件:

// 替换为目标文件名(建议存储文件时同时保存原文件名,还原时直接使用)
$saveFileName = '还原的文件.jpg';
$savePath = './存储目录/' . $saveFileName;

// 确保存储目录存在
if (!is_dir('./存储目录/')) {
    mkdir('./存储目录/', 0755, true);
}

// 写入文件
file_put_contents($savePath, $blobData);

补充提示

  • 存储文件时建议同时存入原文件名、MIME类型等信息,还原时能更精准地处理不同类型的文件。
  • 所有数据库操作必须使用预处理语句,避免SQL注入风险。

内容的提问来源于stack exchange,提问作者user19747488

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 07:25:26