Upload Multiple Files with Collection

Upload Multiple Files with Collection

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👇

🗯 ➡ https://apex.oracle.com/pls/apex/r/kcbarra/example-collection148175/upload-multiples-files-with-apexcollections


Paso a Paso:

  1. 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

  2. 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;
    
  3. 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'