Office Address

  • 123/A, Miranda City Prikano
  • +0989 7876 9865 9
  • info@example.com

Social List

Descarga archivos Oracle APEX con APEX_HTTP.DOWNLOAD

Lectura: 2 minutos

Introducción

¿Alguna vez intentaste descargar un archivo desde Oracle APEX y terminaste complicándote con tipos MIME, headers o conversiones BLOB/CLOB?

Oracle APEX 24.2 simplifica este proceso con el poderoso procedimiento APEX_HTTP.DOWNLOAD. Esta utilidad te permite enviar archivos desde PL/SQL directamente al navegador, sin hacks, sin JavaScript, sin complicaciones.

En este artículo:

  • Te explico qué hace y cómo funciona APEX_HTTP.DOWNLOAD
  • Verás un ejemplo empresarial para descargar un PDF generado dinámicamente
  • Conocerás errores comunes y cómo evitarlos

Este artículo es útil para desarrolladores Oracle APEX, arquitectos y especialistas en backend que necesitan descargar archivos en sus apps sin depender de ORDS ni librerías externas.

Tabla de Contenido

  1. ¿Qué es APEX_HTTP.DOWNLOAD?
  2. Sintaxis y parámetros clave
  3. Ejemplo real: descarga de contrato PDF
  4. Consideraciones especiales (MIME, CLOB)
  5. Buenas prácticas
  6. Conclusión y recurso extra

1. ¿Qué es APEX_HTTP.DOWNLOAD?

Es un procedimiento del paquete APEX_HTTP que permite enviar directamente un archivo desde Oracle APEX al navegador del usuario.

Este procedimiento es ideal cuando necesitas entregar archivos generados dinámicamente o almacenados en BLOB/CLOB en la base de datos.

No necesitas ORDS, ni htp.p, ni owa_util.mime_header manuales.


2. Sintaxis y parámetros clave

APEX_HTTP.DOWNLOAD(
p_content_disposition IN VARCHAR2,
p_mime_type IN VARCHAR2,
p_content IN BLOB,
p_filename IN VARCHAR2 DEFAULT NULL

);
  • p_content_disposition: 'inline' o 'attachment'
  • p_mime_type: tipo MIME, ej. 'application/pdf'
  • p_content: el archivo en formato BLOB
  • p_filename: nombre opcional del archivo a descargar

3. Ejemplo real: descarga de contrato PDF

Supón que tienes una tabla CONTRATOS con archivos en formato BLOB:

CREATE TABLE contratos (
id NUMBER PRIMARY KEY,
cliente VARCHAR2(100),
archivo_pdf BLOB,
nombre_archivo VARCHAR2(255),
mime_type VARCHAR2(100)
);

Creamos una página APEX con botón de descarga y un proceso PL/SQL tipo “Submit”:

DECLARE
l_blob BLOB;
l_mime VARCHAR2(100);
l_nombre VARCHAR2(255);
BEGIN
SELECT archivo_pdf, mime_type, nombre_archivo
INTO l_blob, l_mime, l_nombre
FROM contratos
WHERE id = :P1_ID_CONTRATO;

APEX_HTTP.DOWNLOAD (
p_content_disposition => 'attachment',
p_mime_type => l_mime,
p_content => l_blob,
p_filename => l_nombre
);
END;

🎯 Resultado: al presionar el botón, el navegador descarga el archivo con su nombre real y tipo correcto.


4. Consideraciones especiales (MIME, CLOB)

  • Si el contenido es CLOB, primero conviértelo a BLOB:
FUNCTION clob_to_blob(p_clob IN CLOB) RETURN BLOB IS
l_blob BLOB;
BEGIN
DBMS_LOB.CREATETEMPORARY(l_blob, TRUE);
DBMS_LOB.CONVERTTOBLOB(l_blob, p_clob, DBMS_LOB.LOBMAXSIZE, 1, 1);
RETURN l_blob;
END;
  • Usa el MIME correcto. Ejemplos:
    • PDF → application/pdf
    • Excel → application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
    • Imagen PNG → image/png
  • Para contenido visual como imágenes o PDF, puedes usar inline en lugar de attachment.

5. Buenas prácticas

✅ Siempre valida que el BLOB exista antes de ejecutar DOWNLOAD.
✅ Usa headers MIME correctos según el tipo de archivo.
✅ Incluye un botón claro con ícono o texto explicativo.
✅ Nunca descargues datos sensibles sin control de sesión/rol.
✅ Audita las descargas si son parte de un proceso legal o de cumplimiento.


6. Conclusión

APEX_HTTP.DOWNLOAD es una herramienta poderosa y elegante para descargar archivos desde tus aplicaciones APEX sin esfuerzo.

Con unas pocas líneas de código puedes ofrecer:

  • Contratos
  • Facturas
  • Reportes
  • Imágenes
  • Archivos ZIP generados

Es parte del toolbox moderno de cualquier desarrollador APEX.


🎓 ¿Quieres aprender más?

Accede al módulo completo de manejo de archivos, PDF y CLOBs en Oracle APEX aquí:

👉 Ver curso en Aprendiz Academy
Incluye ejercicios paso a paso, integración con ORDS y generación de reportes con PL/SQL.

Post a Comment

Your email address will not be published. Required fields are marked *