【发布时间】:2016-01-10 08:48:01
【问题描述】:
我有一个数据库,用于存储网站的所有 pdf 文件。该表包含 library_item_id、文件名(文件名)、mime_type、文件大小、file_item(Blob)的列,我有一个名为 download.php 的 php 文件。当用户单击链接时,该文件应该从数据库中下载正确的文件。但是当文件被下载并单击打开时,我得到 Adobe 说它无法打开 pdf。说它没有正确解码。这是我的 download.php 文件:
require_once("scripts/connection.php");
if(isset($_GET["id"])){
$fid = $_GET["id"];
}
else{
header("Location: literature.php");
}
$sql= "SELECT filename, mime_type, file_item FROM library_items WHERE library_item_id = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param('s', $fid);
$stmt->execute();
$stmt->bind_result($filename, $mime, $file_item);
while($stmt->fetch()){
$file_name = $filename;
$mime_type = $mime;
$file = $file_item;
}
header("Content-length: ".strlen($file));
header("Content-type: $mime_type");
header("Content-disposition: download; filename=$file_name");
echo $file;
mysqli_close($conn);
我已经尝试了所有我能想到的方法,包括添加 obj_flush() 命令,但它仍然给我同样的错误。我在这方面做错了什么?
这是将文件插入数据库的代码的编辑。
session_start();
$display = trim($_POST["file-display-name"]);
$company = trim($_POST["companies"]);
$lib_cat = trim($_POST["library-cats"]);
if(empty($display) || empty($company) || empty($lib_cat)){
$_SESSION["errormsg"] = "Required information is missing please fill out all required fields.";
header("Location: ../library.php");
}
else{
$file_name = $_FILES['library-file']['name'];
$tmp_name = $_FILES['library-file']['tmp_name'];
$file_size = $_FILES['library-file']['size'];
$file_type = $_FILES['library-file']['type'];
$fp = fopen($tmp_name, 'r');
$content = fread($fp, filesize($tmp_name));
$content = addslashes($content);
fclose($fp);
if(!get_magic_quotes_gpc()){
$file_name = addslashes($file_name);
}
if(empty($content)){
$_SESSION["errormsg"] = "Required information is missing please fill out all required fields.";
header("Location: ../library.php");
}
else{
require_once("connection.php");
// Insert the logo into the companies photo table
$sql = "INSERT INTO library_items(filename, mime_type, file_size, file_item, display_name, company_id, library_category_id) VALUES(?,?,?,?,?,?,?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param('sssssss', $file_name, $file_type, $file_size, $content, $display, $company, $lib_cat);
if(!$stmt->execute()){
$_SESSION["errormsg"] = "Failed to add library item: ".mysqli_error();
header("Location: ../library.php");
}
}
unset($_SESSION["errormsg"]);
$_SESSION["successmsg"] = "Library Item successfully added into the database.";
header("Location: ../library.php");
}
更新: 我现在下载文件并尝试在双击打开下载的文件后显示。它告诉我有一个无效的颜色空间。据我所知,这是将文件上传到数据库时出现的问题。从我发布的上传文件中,有什么我做错了吗?
【问题讨论】:
-
你的表结构是什么?看来您的 file_item 列的类型有误。
-
@Alex : 你需要下载吗?
-
file_item 是一个大块。这实际上是文件的内容。
-
是的,我需要文件下载或显示在一个或另一个页面上。
-
@AlexBeyer :试试我编辑的答案。抱歉,我没有测试过。