PHP上传并显示PDF文件BLOB损坏

时间:2018-06-28 13:57:30

标签: php mysql file 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;

2 个答案:

答案 0 :(得分:0)

能否请您提供表格结构的示例? 表的data字段类型很可能没有为大型数据集配置,而是在特定数量的字节后切断了数据。您是否尝试过其他字段类型?也许是LONGTEXTBLOB

答案 1 :(得分:0)

我找到了解决问题的方法。似乎PDO的默认缓冲区大小为1MiB。这用$ pdo-> setAttribute(PDO :: MYSQL_ATTR_MAX_BUFFER_SIZE = 1024 * 1024 * 16)进行了更改;为16 MB。然后一切都变得完美了。