提问人:Josue Velasquez 提问时间:9/30/2023 最后编辑:Josue Velasquez 更新时间:10/1/2023 访问量:63
当我尝试查看以 bin 格式上传到数据库的 pdf 文档时,它出现空白?
when I try to view my pdf document uploaded to a database in bin format it comes up blank?
问:
我正在开发一个使用 php 和 mysql 的网站,我将 pdf 文档以 bin 格式保存在数据库中。
为了能够在查看器中看到模态窗口中的 pdf,我有这个 js 控制器:
// Ver el documento
function documento(id_aval) {
// Crea un objeto que contenga el id_aval
var dataToSend = { id_aval: id_aval };
// Realiza una petición AJAX para obtener el documento en formato binario desde el servidor
$.post("../controllers/Utils/endorsement.php?pc=obtener_documento", dataToSend, function (data) {
console.log(data)
// Muestra el PDF en el visor
mostrarPDF(data);
})
.fail(function(error) {
console.error("Error al obtener el documento:", error);
});
}
// Función para mostrar el PDF en el visor
function mostrarPDF(data) {
// Abre el modal
abrir_view_document();
// Decodifica la cadena base64 directamente en un Uint8Array
var decodedPdfData = new Uint8Array([...data].map(char => char.charCodeAt(0)));
// Convierte los datos a base64 nuevamente
var base64Data = btoa(String.fromCharCode.apply(null, decodedPdfData));
console.log("Base64 Data:", base64Data);
// Actualiza el contenido del visor de PDF dentro del modal
var viewer = document.getElementById('ver_documento_contenedor');
viewer.innerHTML = '<iframe src="data:application/pdf;base64,' + base64Data + '" width="800px" height="500px"></iframe>';
}
附件是日志的屏幕截图,显示我正确地获得了 bin 文件和 base64 转换。
我也有这个php控制器:
// Obtener el documento en formato binario
case "obtener_documento":
if (!empty($_POST["id_aval"])) {
$id_aval = $_POST["id_aval"];
$documento = $aval->get_documento($id_aval);
// Devolver el documento en formato binario
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="documento.pdf"');
echo $documento;
exit;
}
break;
而这个PHP模型:
// Obtener el documento en formato binario
public function get_documento($id_aval)
{
$conectar = parent::conexion();
$sql = "SELECT documento_avalOrganizacion FROM pc_aval_organizacion WHERE id_aval = ?";
$stmt = $conectar->prepare($sql);
$stmt->bindValue(1, $id_aval);
$stmt->execute();
$resultado = $stmt->fetch(PDO::FETCH_ASSOC);
if ($resultado) {
return $resultado['documento_avalOrganizacion'];
} else {
return false;
}
}
这是我得到的结果......文档为空。
两者都没有给我控制台错误或日志,并且 bin 格式的文档本身没有损坏或任何东西,实际上,如果我下载它并将扩展名从 .bin 更改为 .pdf,您可以完美地看到内容。
我不知道问题是否是因为我的页面带有友好的路由,因为我试图使用文件的 url 来做 pdf 查看器,但总是把我送到 404,因为它是一个未定义的路径。有了一切,我还留下了我的友好路线代码,以防万一......
.htaccess域名
# Permitir el acceso directo a recursos (CSS, JS, imágenes, etc.)
RewriteRule ^(assets/|favicon\.ico) - [L]
# Permitir el acceso directo a archivos PDF
RewriteRule \.pdf$ - [L]
# Redirigir todas las solicitudes a index.php, excepto para recursos
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?uri=$1 [QSA,L]
RewriteEngine On
RewriteBase /Plataforma/
Options -Indexes
ErrorDocument 405 /Plataforma/index.php
ErrorDocument 404 /Plataforma/index.php
ErrorDocument 403 /Plataforma/index.php
ErrorDocument 402 /Plataforma/index.php
ErrorDocument 401 /Plataforma/index.php
ErrorDocument 400 /Plataforma/index.php
# log PHP errors to a file
php_flag log_errors on
php_value error_reporting 32767
php_value error_log "error_log.txt"
索引.php
<?php
// Conexión BDD
require_once 'configs/connections/connection.php';
// Temporizador de la session
require_once 'configs/global/session_timeout.php';
// Obtener la URL solicitada
$folderPath = dirname($_SERVER['SCRIPT_NAME']);
$request_uri = $_SERVER['REQUEST_URI']; //Esta ruta es para produccion
$url = substr($request_uri, strlen($folderPath)); //Esta ruta es para local
// Incluir archivos de rutas específicos
require_once 'configs/routes/user.php';
require_once 'configs/routes/admin.php';
require_once 'configs/routes/control.php';
// Definir un array de rutas amigables
$routes = [];
// Agregar las rutas de usuario al array $routes
foreach ($userRoutes as $key => $value) {
$routes[$key] = $value;
}
// Agregar las rutas de administrador al array $routes
foreach ($adminRoutes as $key => $value) {
$routes[$key] = $value;
}
// Agregar las rutas de control al array $routes
foreach ($controlRoutes as $key => $value) {
$routes[$key] = $value;
}
// Comprobar si la ruta solicitada está en el array
if (array_key_exists($url, $routes) && strpos($url, '.pdf') === false && !preg_match('/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/', $url)) {
// Incluir la vista correspondiente
include $routes[$url];
} else {
// Ruta no encontrada, mostrar la página de error 404
include 'views/Error/404/index.php';
}
芸香
<?php
// Variables
$Home_admin = 'Admin';
$Login_admin = 'administrador';
$Users = 'Admin/usuarios';
$User_massive = 'Admin/usuarios/masivo';
$Organizations = 'Admin/organizaciones';
$Countries = 'Admin/paises';
$Type_organization = 'Admin/organizaciones/tipos';
$Categories = 'Admin/categorias';
$Type_course = 'Admin/cursos/tipos';
$Courses = 'Admin/cursos';
$Students = 'Admin/cursos/alumnos';
$Endorsements = 'Admin/avales';
$Certificates = 'Admin/plantillas/certificados';
$Constancias = 'Admin/plantillas/constancias';
$Certify = 'Admin/certificar';
// Designacion de rutas
$adminRoutes = [
'/' . $Home_admin => 'views/Admin/Home/index.php',
'/' . $Login_admin => 'views/Auth/Admin/index.php',
'/' . $Users => 'views/Admin/Utils/Users/index.php',
'/' . $User_massive => 'views/Admin/Utils/Users/Massive/index.php',
'/' . $Organizations => 'views/Admin/Utils/Organizations/index.php',
'/' . $Countries => 'views/Admin/Utils/Countries/index.php',
'/' . $Type_organization => 'views/Admin/Utils/Type_organizations/index.php',
'/' . $Categories => 'views/Admin/Utils/Categories/index.php',
'/' . $Type_course => 'views/Admin/Utils/Type_course/index.php',
'/' . $Courses => 'views/Admin/Utils/Course/index.php',
'/' . $Students => 'views/Admin/Utils/Course/Student/index.php',
'/' . $Endorsements => 'views/Admin/Utils/Endorsement/index.php',
'/' . $Certificates => 'views/Admin/Utils/Templates/Certificates/index.php',
'/' . $Constancias => 'views/Admin/Utils/Templates/Constancias/index.php',
'/' . $Certify => 'views/Admin/Utils/Certify/index.php',
];
如果你能帮我看看我做错了什么,我将不胜感激,我已经做了很长时间了,我找不到解决方案。
答: 暂无答案
评论
<iframe>