logo
small logo
  • Producto
  • Comprar
  • Ayuda
  • About
  • Consola de usarios Ayuda
    • en
    • de
    • JP
    • ZH
  • Página principal
  • /
  • Blogs
  • /
  • La ampliación de los componentes cliente-servidor para recibir y transferir los archivos fp3
  • Convierta los datos de la base de datos en un documento en Delphi / Lazarus / C ++ Builder

    3 de febrero de 2021

    ¿Cómo convertir un montón de datos en un informe? Oracle DB, MySQL, Microsoft SQL Server, PostgreSQL,

    read more
  • Cómo crear un solo informe de varios en Delphi / Lazarus / C++ Builder

    11 de diciembre de 2020

    Me gustaría señalar que FastReport VCL es uno de los componentes más convenientes para generar

    read more
  • Hacer un informe detallado en FastReport VCL (Delphi / Lazarus)

    9 de febrero de 2021

    "Drill Down" o "profundización en los datos" es un concepto de muchos aspectos, que puede

    read more
  • Cómo crear códigos de barras CODE 39 y CODE 39 Extended con Delphi / Lazarus

    23 de octubre de 2020

    CODE 39 es el código de barras desarrollado por Intermec Corporation en 1975. En el

    read more
  • Cómo generar código de barras ITF (intercalado, industrial, matricial) con Delphi / Lazarus / C ++ Builder

    11 de noviembre de 2020

    Un poco de teoría sobre los códigos de barras Es difícil imaginar nuestra vida sin códigos

    read more

La ampliación de los componentes cliente-servidor para recibir y transferir los archivos fp3

13 de diciembre de 2021

FastReport VCL

Para formar un sistema corporativo la gestión de documentos desempeña una función importante. Si se utiliza FastReport VCL en vuestro sistema, el formato fp3 es un documento principal del informe preparado.

Para facilitar la formación de documentos de varios tipos desde el formato interior sin recompilar los informes hemos ampliado nuestros componentes cliente-servidor que permiten ahora aceptar el formato fp3 de los clientes y convertirlo en todo formato de exportación disponible.

Esto va acompañado de un sistema de caché en del que el servidor puede rechazar un archivo que ya tiene trabajar con el caché. Las pequeñas modificaciones se incluyen también, por ejemplo, el tamaño máximo del archivo recibido.

Para que vuestro servidor pueda aceptar y procesar los archivos fp3, necesita añadir un par de personalizaciones a la configuración (el archivo xml con personalizaciones).

New settings in the config

HeaderMaxSize es un tamaño máximo del encabezado HTTP en bytes. Un valor máximo es 16384.

ContentMaxSize es un tamaño máximo de los archivos fp3 cargados en megabytes (0 – sin limitaciones).

Hemos actualizado también nuestros proyectos de exposición que ustedes pueden cargar aquí.

Para el lado del cliente estudiamos un script php en el papel de cliente, pero por supuesto el cliente puede ser escrito en cualquier lenguaje de programación.

Un formulario HTML para un script:

<html>
 <head>
 <meta charset="utf-8">
 </head>
 <body> 
 <form enctype="multipart/form-data" action="post.php" method="POST">
 <!—El campo MAX_FILE_SIZE debe ser indicado antes del campo de la carga del archivo -->
 <input type="hidden" name="MAX_FILE_SIZE" value="3000000000" />
 <!—El nombre del elemento input determina un nombre en la matriz $_FILES -->
 Send this: <input name="userfile" type="file" />
 <input type="submit" value="Send File" />
 </form>
 </body>
</html>

Post.php:

<?php
//La dirección del servidor FastReport
$host ='http://localhost:8097';
//El formato de exportación 
$exportFormat = 'PDF';
 
//El nombre del archivo que el usuario ha seleccionado 
$OldName = $_FILES['userfile']['name'];
//Su nombre real después de nuestra carga (sustituimos la extensión tmp por fp3)
$name = substr_replace($_FILES['userfile']['tmp_name'], 'fp3', -3);
//Guardamos en el servidor php 
move_uploaded_file($_FILES['userfile']['tmp_name'], $name);
//Lo abrimos 
$file = new \CURLFile($name);
//Inicializamos la sesión cURL
$ch = curl_init();
 
//Instalamos un URL a cargar
curl_setopt($ch, CURLOPT_URL, $host);
//Seleccionamos el método de solicitud (Post)
curl_setopt($ch, CURLOPT_POST, true);
//Para leer los datos devueltos 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//Para leer el encabezado devuelto 
curl_setopt($ch, CURLOPT_HEADER, 1);
//Para los archivos de gran tamaño necesita aumentar el tiempo de espera (por defecto es de 30 segundos), ajustado a 0, lo que significa la espera infinita.
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
 
//Generar MD5 para un archivo.
$md5 = md5_file($name);
//Enviar el formato y MD5
curl_setopt($ch, CURLOPT_HTTPHEADER , array('Format-Export: '.$exportFormat, 'Content-MD5: '.$md5));
 
//Comprimir el archivo antes de enviar 
$data = array($exportFormat => $file);
//Enviar el archivo 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
//Esperar la respuesta 
$response = curl_exec($ch);
 
//La prueba comprobada del retorno 
if (empty($response))
{
 echo 'received an empty response';
}
else
{
 if (strstr($response, 'HTTP/1.1 301') == '')
 {
 //Algo salió mal. El servidor ha devuelto una respuesta inesperada
 echo '404';
 curl_close($ch);
 exit;
 }
 if (curl_errno($ch))
 {
 //El servidor ha devuelto un error que mostramos en rojo 
 echo '<span style="color:red">';
 echo 'error: '.curl_error($ch);
 echo '</span>';
 }
 else
 {
 //Extraer la dirección para obtener los resultados de exportación de la respuesta del servidor FastReport 
 $Location = GetLocationFromHeader($response);
 if (empty($Location))
 {
 echo 'error: Location not found';
 }
 else
 {
 //Es posible dirigir al cliente a la dirección para recuperar el archivo, pero no en una arquitectura, en la que el servidor FastReport está conectado localmente al servidor php y no tiene acceso a Internet. Hay que descargar todo por vía de las herramientas del servidor php y es más seguro lógicamente para impedir el acceso a los documentos extranjeros.
 $file = file_get_contents_curl($host.$Location);
 if (empty($file))
 {
 echo 'error: file missing';
 }
 {
 //Debemos generar un nuevo nombre para devolver un archivo al cliente.
 //La aplicación es la siguiente: El nombre del archivo es el mismo que el del cliente, la respuesta del servidor se analiza para obtener la ampliación.
 //Extraemos el formato de la respuesta. Tomamos el nombre antiguo que el cliente nos ha enviado y sustituimos la extensión por el resultado de exportación (se ha enviado 123.fp3, obtenemos 123.pdf).
 $Format = getExtension(GetFileNameFromLocation($Location));
 $OldName = substr_replace($OldName, $Format, -3);
 
 //La transmisión de los archivos del servidor php al cliente 
 header('X-Accel-Redirect: storage/'.$OldName);
 header('Content-Disposition: attachment; filename="'.$OldName.'"');
 echo $file;
 }
 }
 }
}
curl_close($ch);
 
 
 
//Las funciones subsidiarias 
//Extraer la dirección para recuperar un resultado de conversión de la respuesta del servidor 
function GetLocationFromHeader($arg_1)
{
 $Location = strstr($arg_1, 'Location');
 $Location = strstr($Location, '/');
 $Location = substr($Location, 0, strrpos($Location, 'SessionId')-2);
 return $Location;
}
 
//La recuperación del nombre del archivo desde la respuesta 
function GetFileNameFromLocation($arg_1)
{
 $FN = substr($arg_1, strripos($arg_1, '/')+1, strlen($arg_1));
 return $FN;
}
 
//La recuperación de la extensión desde el nombre del archivo 
function getExtension($fileName)
{
 return substr($fileName, strrpos($fileName, '.') + 1);
}
 
//El análogo más rápido de la función file_get_contents
function file_get_contents_curl($url)
{
 $ch = curl_init();
 
 curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
 curl_setopt($ch, CURLOPT_HEADER, 0);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
 
 $data = curl_exec($ch);
 curl_close($ch);
 
 return $data;
}
?>

Así usted puede delinearse de algunos problemas grandes. No es necesario reconstruir los informes, lo que reduce la carga del servidor. Será posible reservar los informes donde desee, y la parte del cliente puede escribirse en un lenguaje de programación que es cómoda para usted. 

about product comprar
avatar
Sergey Plastun
VCL Development
Fast Reports Team: Sergey Plastun - VCL Development at Fast Reports
VCL Lazarus FastReport PHP Delphi HTML

Add comment
logo
  • 800-985-8986 (English, US)
  • +4930568373928 (German)
  • +55 19 98147-8148 (Portuguese)
  • info@fast-report.com
  • 901 N Pitt Str #325 Alexandria VA 22314
  • Comprar
  • Descargar
  • Documentación
  • Opiniones de usuarios
  • Cómo desinstalar nuestros productos
  • FAQ
  • Toturial en vídeo
  • Foro
  • Documentación técnica
  • Nuestras noticias
  • Quiénes somos
  • Socios
  • Extended licensing
  • Contactos

© 1998-2023 by Fast Reports Inc.

  • Privacidad