У меня есть база данных, которая хранит все мои pdf-файлы для веб-сайта. В таблице есть столбцы для library_item_id, имя файла (имя файла), mime_type, размер файла, file_item (Blob), и у меня есть файл php, называемый download.php. Предполагается, что этот файл загружает правильный файл из базы данных, когда пользователь нажимает на ссылку. Но когда файл загружается и нажимается, чтобы открыть, я получаю Adobe, говоря, что он не может открыть PDF. Говорить, что он неправильно декодирован. Вот мой download.php файл:PDF не загружается, когда файл называется
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");
}
UPDATE: теперь у меня есть загрузка файлов и пытаюсь отобразить один раз загруженный файл дважды щелкнуть, чтобы открыть. Это говорит мне, что есть недопустимое colorSpace. Из того, что я могу сказать, это проблема, когда файл загружается в базу данных. Из моего загруженного файла есть что-нибудь, что я не делаю правильно?
Какова ваша структура таблицы? Кажется, что у вас неправильный тип для столбца file_item. –
@Alex: вам нужна загрузка? –
file_item - большой капля. На самом деле это содержимое файла. –