我试图在用户请求时在浏览器中显示存储在 mysql 数据库中的 PDF 文件。
MySQL表的结构:
CREATE TABLE `file` (
`id` Int Unsigned Not Null Auto_Increment,
`name` VarChar(255) Not Null Default 'Untitled.txt',
`mime` VarChar(50) Not Null Default 'text/plain',
`size` BigInt Unsigned Not Null Default 0,
`data` MediumBlob Not Null,
`created` DateTime Not Null,
PRIMARY KEY (`id`)
)
php代码:
$query = "
SELECT `type`, `name`, `size`, `data`, `mime`
FROM `file`
WHERE `id` = {$id}";
$result = $dbLink->query($query);
if($result) {
// Make sure the result is valid
if($result->num_rows == 1) {
// Get the row
$row = mysqli_fetch_assoc($result);
// Print headers
header('Accept-Ranges: bytes');
header('Content-Transfer-Encoding: binary');
header("Content-Type: ".$row['mime']);
header("Content-Length: ".$row['size']);
header("Content-Disposition: inline; filename=".$row['name']);
echo $row['data'];
}
}
将文件保存到数据库的代码:
if(isset($_FILES['uploaded_file'])) {
// Make sure the file was sent without errors
if($_FILES['uploaded_file']['error'] == 0) {
// Connect to the database
$dbLink = new mysqli('localhost', 'REDACTED',"REDACTED", 'pdfs');
if(mysqli_connect_errno()) {
die("MySQL connection failed: ".mysqli_connect_error());
}
// get all required data
$name = $dbLink->real_escape_string($_FILES['uploaded_file']['name']);
$type = $dbLink->real_escape_string($_FILES['uploaded_file']['type']);
$data = $dbLink->real_escape_string(file_get_contents($_FILES ['uploaded_file']['name']));
$size = intval($_FILES['uploaded_file']['size']);
// Create the SQL query
$query = "
INSERT INTO `file` (
`name`, `type`, `size`, `data`, `created`
)
VALUES (
'{$name}', '{$type}', {$size}, '{$data}', NOW()
)";
// Execute the query
$result = $dbLink->query($query);
// Check if it was successfull
if($result) {
echo 'Success! Your file was successfully added!';
}
else {
echo 'Error! Failed to insert the file'
. "<pre>{$dbLink->error}</pre>";
}
但是,当我尝试查看 pdf 时,adobe reader 开始加载,然后我收到此错误消息:
the file is damaged and could not be repaired. am i doing something wrong?
最佳答案
老实说,我一点也不喜欢这种方式。
亲吻
保持简短
无论您想做什么,都有更好的方法。
- 如果安全是你的问题,你有 .htaccess 和 access 角色
- 如果文件处理是您使用 PHP 的问题。
- 如果 protected 下载是一个问题,那么再次结合 PHP 及其 session 处理,您可以做到这一点。
- 如果查看是您使用的浏览器的问题。
- 如果你想强制下载文件,那么PHP的
header
标签就足够了。
关于php - 显示存储在 MySQL 数据库 PHP 中的 PDF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9709960/