如何将存储为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
相关产品推荐
相关产品推荐

