Dentro de las muchas consultas que me hacen, recibí una que me parece interesante de tratar aquí, y es ¿cómo se puede «subir» archivos al sistema de archivos del servidor?
El procedimiento requiere primeramente que creemos un directorio Oracle, que apunte a una ubicación física en el disco del servidor, por ejemplo «C:\Oracle\Archivos» si nuestro servidor es Windows, o bien, «/home/oracle/archivos» si el servidor es Unix/Linux.
Para crear el directorio utilizamos la sentencia:
En Windows:
create directory MisArchivos as ‘C:\Oracle\Archivos’;
En Unix/Linux:
create directory MisArchivos as ‘/home/oracle/archivos’;
Luego debemos asignar los permisos pertinentes al nuevo directorio creado:
grant read, write on directory MisArchivos to mi_usuario;
donde «mi_usuario» corresponde al usuario con los permisos para leer o escribir en el directorio que creamos.
Si no tienes los permisos necesarios para ejecutar las tareas anteriores, debes solicitar a tu DBA que lo haga por tí.
La segunda parte del procedimiento, está relacionado con Apex y lo que debes hacer es:
- Crear una nueva página en blanco, en la aplicación en la que quieres habilitar esta funcionalidad. Supongamos que es la página 35.
- Crea una región tipo HTML dentro de la nueva página creada en el punto anterior.
- En el encabezado de la región, agregar el siguiente código:
<script>
function f_AsignaNombre ()
{ $x(‘P35_ARCHIVO’).value = $x(‘P35_NOMBRE’).value}
</script>
- Ahora agrega un campo tipo «Exploración de Archivos». Para el ejemplo lo vamos a nombrar «P35_ARCHIVO».
- Este campo debe ser del tipo de almacenamiento «Tabla wwv_flow_files».
- En el campo «Atributos de Elementos de Pantalla HTML» agregar el siguiente código:
onChange=»javascript:f_AsignaNombre()»;
- Ahora crea un campo del tipo «Oculto» y llámalo: «P35_NOMBRE».
- Crea otro campo «Oculto» al que llamarás: «P35_ARCHIVO_ID».
- El paso siguiente es crear un botón, con el cual vamos a ejecutar el procedimiento, le puedes poner el nombre que quieras, como valor a mostrar puedes ponerle «Cargar».
- Crea una Validación a nivel de elemento para el campo P35_ARCHIVO
- Selecciona el tipo «Elemento No Nulo»
- Finalice el ayudante para agregar la validación.
- Ahora cree un Proceso de Página que se ejecute al hacer clic en el botón «»Cargar» creado en el paso 9, después de cálculos y validaciones y que contenga el siguiente código:
if :P35_ARCHIVO is not null then
select id
into :P35_ARCHIVO_ID
from wwv_flow_files
where name = :P35_NOMBRE;
carga_blob_a_bfile(&P35_ARCHIVO_ID,’MisArchivos’);
delete from wwv_flow_files
where id = :P35_ARCHIVO_ID;
end if;
- El código del procedimiento utilizado en el código anterior lo puedes descargar de aquí. Para no tener problemas al crear este procedimiento, debe tener permisos de lectura sobre la tabla WWV_FLOW_FILES.
- Cree un sinónimo público para el procedimiento «carga_blob_a_bfile».
create public synonym carga_blob_a_bfile for esquema.carga_blob_a_bfile;
- De permisos de ejecución sobre el objeto «carga_blob_a_bfile» al usuario PUBLIC.
grant execute on carga_blob_a_bfile to public;
Y eso es todo, ahora debería poder «subir» archivos al directorio «MisArchivos» dentro de su servidor.
Espero que les sea de utilidad.
una pregunta este proceso solo se puede hacer en version 4.0 o en versio 3.2 ..
gracias …
Puedes usarlo en la versión 3.2 también
Por favor necesito me ayuden con esto.. Tengo un reporte tipo catalogo cuyas fotos estan almacenadas en una carpeta en otra maquina..como hago en apex para leer las fotos de esa carpeta y no subir una por una a un campo blob, El nombre de la foto en la carpeta es el codigo del producto en el sistema. Auxilio!!!
Tienes la opción de incluir las imágenes en una carpeta de un servidor web y hacer referencia a ellas con el tag «img» con algo como:
Buenas tardes, tengan la bondad de ayudarme , necesito descargarme archivos desde el servidor hacia mi computador usando APEX, saben ustedes hacer, dispongo de la versión 4 del Apex.
Por su ayuda ,les agradezco.
Saludos. Daniela P