En este post analizaremos en base a un requerimiento de Proyectos, cómo cargar múltiples files o archivos usando apex_application_temp_files y en el momento de leer los archivos o files los ingresamos dentro de un apex_collection. Este tipo de procesos nos ayudan a poder subir rápidamente información y luego insertarlo en alguna tabla o estructura de nuestro modelo.
🔔Una de las ventajas de usar colecciones es que la manipulación de información es mucho más rápida, más en manejo de información de grandes volúmenes.
Esta es una aplicación del ejemplo👇
Paso a Paso:
En nuestra aplicación creamos un Page Item -> Type: File Upload, mostramos para poder cargar los archivos como: Inline Dropzone y en Storage -> APEX_APPLICATION_TEMP_FILES
Luego creamos un Proceso en donde leemos lo almacenado en la tabla APEX_APPLICATION_TEMP_FILES y creamos un APEX_COLLECTION:
declare l_file_names apex_t_varchar2; l_file apex_application_temp_files%rowtype; -- begin APEX_COLLECTION.CREATE_OR_TRUNCATE_COLLECTION( p_collection_name=>'MULTIPLES_FILES'); l_file_names := apex_string.split ( p_str => :P5_BROWSER, p_sep => ':' ); for i in 1 .. l_file_names.count loop select * into l_file from apex_application_temp_files where name = l_file_names(i); APEX_COLLECTION.ADD_MEMBER( p_collection_name => 'MULTIPLES_FILES', p_c001 => :P5_PROJECT_ID, p_c002 => :P5_COMMENTS, p_c003 => l_file.FILENAME, p_c004 => l_file.MIME_TYPE, p_blob001 => l_file.BLOB_CONTENT, p_n001 => l_file.ID, p_d001 => sysdate ); end loop; exception when others then apex_error.add_error(p_message => 'The file NO uploaded!', p_display_location =>apex_error.c_inline_in_notification); end;
Creamos un interactive report con el siguiente query en donde nos muestre, la información de la colección y también poder descargar los archivos o files cargados.
En la columna File Download, se identifica los campos como Blob, Primary Key, Mime Type and Filename en base a lo que se ha agregado en la collection.
SELECT seq_id, c001, c002, c003, c004, n001, DBMS_LOB.GETLENGTH(blob001) FILE_DOWNLOAD, d001 FROM APEX_collections where collection_name='MULTIPLES_FILES'