php - PHP上传并显示PDF文件BLOB损坏
问题描述
我正在尝试在我的网页上创建一个功能,用于将文件上传到 MySQL 数据库,然后显示/使用户能够稍后下载文件。PDF 的上传似乎很好,但是当打开下载的文件时,Adobe 告诉我文件已损坏。当试图在浏览器中显示文件时,它说它无法打开文件。请帮忙
上传脚本:
if(isset($_POST['submit'])){
$name = $_FILES['myfile']['name'];
$type = $_FILES['myfile']['type'];
$data = file_get_contents($_FILES['myfile']['tmp_name']);
$stmt = $pdo->prepare("INSERT INTO f_driver VALUES('', ?, 'Datablad', ?, ?, ?, NULL, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $type);
$stmt->bindParam(3, $data);
$stmt->bindParam(4, $pid);
$stmt->bindParam(5, $uid);
$stmt->execute();
}
下载/显示脚本(附件改为内联)
require_once("../include/pdo_connect.php");
$id = $_GET['id'];
$table = $_GET['table'];
$stat = $pdo->prepare("SELECT * FROM $table WHERE id = ?");
$stat->bindParam(1, $id);
$stat->execute();
$row = $stat->fetch();
$name = $row['name'];
$type = $row['mime'];
$content = $row['data'];
header("Content-type: $type");
header("Content-Disposition: attachment; filename=$name");
echo $content;
解决方案
我找到了解决我的问题的方法。似乎 PDO 的默认缓冲区大小为 1MiB。这是用 $pdo->setAttribute(PDO::MYSQL_ATTR_MAX_BUFFER_SIZE = 1024*1024*16); 16 MB。然后一切都很完美。
推荐阅读
- react-native - React Native:持久化 API 数据并在连接时检查它是否是最新的
- r - 总结列并将其作为 R 中的 colnames- 数据框
- angular - Angular OnChanges 为输入变量触发,但变量未更新
- lvm - 缺少 LVM 卷的创建时间
- windows - 阻止用户使用 PowerShell 打开已经存在的程序
- azure - 您可以使用 sql server 别名使用活动目录集成身份验证连接到 azure 吗?
- r - rmd 子交叉引用
- python-3.x - 搜索引擎如何立即检测到我的爬虫
- azure-devops - 运行 dotnet-ef 时构建管道中的随机故障
- android - 为什么我不能从视图模型 MutableLiveData 更新 googlemaps 折线?