ZIP Files Hochladen und Entpacken

Gerade im Web ist es oft nicht sehr einfach mehrere Megabyte große Dateien via Browserupload hochzuladen. Bei textbasierten Files hat man allerdings die Möglichkeit durch Zippen ein sehr großes File auf eine kompakte Größe zu bringen, welche bei einem Webupload ohne Probleme hochgeladen werden kann.

Durch die Klasse CL_ABAP_ZIP kann man dieses ZIP Files dann ohne großen Aufwand entpacken und weiterverarbeiten.

Ich möchte dies hier in einem kleinen Beispiel zeigen. Die Daten werden via Web Dynpro File Upload in den Kontext der Applikation geschrieben. In meiner Beispielmethode wird dann das gezippte File, diese befindet sich im DATA Attribut, entpackt und in den Kontexkt zurück geschrieben.

DATA: obj_node TYPE REF TO if_wd_context_node,
      obj_element TYPE REF TO if_wd_context_element.
DATA: wa_upload_file TYPE wd_this->element_upload_file.
DATA: obj_zip TYPE REF TO cl_abap_zip.

* Get upload data from context
obj_node = wd_context->path_get_node( 'UPLOAD_FILE' ).
obj_element = obj_node->get_element( ).
obj_element->get_static_attributes( IMPORTING static_attributes = wa_upload_file ).

* Check if file is zipped
IF wa_upload_file-mime_type = 'application/x-zip-compressed'.
* Create ZIP object
  CREATE OBJECT obj_zip.

* Unzip data
  obj_zip->load( wa_upload_file-file_data ).

  obj_zip->get( EXPORTING index = 1
                IMPORTING content =wa_upload_file-file_data
                EXCEPTIONS zip_index_error = 1
                           zip_decompression_error = 2
                           OTHERS = 3 ).
END.

* Set data back to context
obj_element->set_static_attributes( IMPORTING static_attributes = wa_upload_file ).

FREE: obj_node, obj_element, obj_zip.
CLEAR: wa_upload_file.

Nun stehen die Filedaten entzippt im Kontext und können von dort weiterverarbeitet werden.

Posted on 20. März 2015 in Blog, Web Dynpro/ABAP

Back to Top