ABAP中ZIP文件的操作

  1. How to zip file in application server

 

REPORTz_zip_files_in_appsvr .

 

DATA:lt_data            TYPETABLE OF x255,

      ls_data           LIKE LINE OF lt_data.

 

DATA:lv_zip_content     TYPE xstring ,

      lv_dsn1(100)      VALUE '/sap/NSP/sys/test.as',

      lv_dsn2(100)      VALUE '/sap/NSP/sys/test2.mxml',

      lv_dsn3(100)      VALUE '/sap/NSP/sys/testarchive.zip',

      lv_file_length    TYPE i ,

      lv_content        TYPE xstring,

      lo_zip            TYPE REF TO cl_abap_zip.

 

CREATEOBJECT lo_zip.

 

* Readthe data as a string

CLEARlv_content .

OPENDATASET lv_dsn1 FOR INPUT IN BINARY MODE.

READDATASET lv_dsn1 INTO lv_content .

CLOSEDATASET lv_dsn1.

 

lo_zip->add(name = 'test.as' content = lv_content ).

 

CLEARlv_content .

 

OPENDATASET lv_dsn2 FOR INPUT IN BINARY MODE.

READDATASET lv_dsn2 INTO lv_content .

CLOSEDATASET lv_dsn2.

 

lo_zip->add(name = 'test2.mxml' content = lv_content ).

 

lv_zip_content  = lo_zip->save( ).

 

*Conver the xstring content to binary

CALLFUNCTION 'SCMS_XSTRING_TO_BINARY'

  EXPORTING

    buffer       = lv_zip_content

  IMPORTING

    output_length= lv_file_length

  TABLES

    binary_tab   = lt_data.

 

OPENDATASET lv_dsn3 FOR OUTPUT IN BINARY MODE.

LOOP ATlt_data INTO ls_data.

  TRANSFERls_data TO lv_dsn3.

ENDLOOP.

CLOSEDATASET lv_dsn3.

 

 

————————————————————————————————————————————————

 

  1. How to decompress zip file

 

  • On presentation server

 

REPORT zflx_test.

 

TYPES:

t_xline(2048TYPE x"BINARY FILES

 

BEGIN OF t_line,

line(1024TYPE c,

END OF t_line"CONTENT

 

DATA:

size TYPE i.

 

DATAl_output TYPE string.

 

DATA:

data_tab TYPE STANDARD TABLE OF t_xline,

text_tab TYPE STANDARD TABLE OF t_line.

 

DATA:

input_x TYPE xstring"BINARY CONTENT INPUT

output_x TYPE xstring"BINARY OUTPUT OUTPUT

 

 

DATA cl_zip TYPE REF TO cl_abap_zip .

 

DATA files LIKE LINE OF  cl_abap_zip=>files.

 

DATA:

name TYPE string.

 

PARAMETER:

  p_file TYPE string.

 

PARAMETER:

  p_output TYPE string DEFAULT 'C:\TEST\'.

 

CALL METHOD cl_gui_frontend_services=>gui_upload

  EXPORTING

    filename   p_file

    filetype   'BIN'

  IMPORTING

    filelength size

  CHANGING

    data_tab   data_tab.

 

 

CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'

  EXPORTING

    input_length size

  IMPORTING

    buffer       input_x

  TABLES

    binary_tab   data_tab.

 

CREATE OBJECT cl_zip.        "创建ZIP对象

 

CALL METHOD cl_zip->load(      "载入ZIP文件到BINARY格式字段

  EXPORTING

    zip input_x

          ).

 

 

LOOP AT cl_zip->files INTO files. 

 

  CLEAR output_x.

  MOVE files-name TO name.

  CONCATENATE p_output name INTO l_output.

  cl_zip->get(                  "得到文件内容

  EXPORTING

  name name " Example.txt (file in the zip file)

  IMPORTING

  content output_x

  )

  .

 

  REFRESH data_tab.

 

  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'

    EXPORTING

      buffer        output_x

    IMPORTING

      output_length size

    TABLES

      binary_tab    data_tab.

  CALL FUNCTION 'SCMS_BINARY_TO_TEXT'

    EXPORTING

      input_length size

    TABLES

      binary_tab   data_tab

      text_tab     text_tab.

  CALL METHOD cl_gui_frontend_services=>gui_download

    EXPORTING

      bin_filesize size

      filename     l_output

      filetype     'BIN'

    CHANGING

      data_tab     data_tab.

ENDLOOP.


 

  • On application server

  

DATAl_file TYPE string,        l_path TYPE localfile.

 

DATA  l_encod TYPE abap_encod VALUE 'NON-UNICODE'.

* ZIP info

DATAzip_data   TYPE        xstring,

      zip        TYPE REF TO cl_abap_zip,

      unzip_data TYPE xstring.

 

DATA txt_line  TYPE TABLE OF string WITH HEADER LINE.

DATA txt_data     TYPE string.

DATA txt_newline  TYPE TABLE OF string.

DATA l_count TYPE int4.

DATA conv_x2c TYPE REF TO cl_abap_conv_in_ce.

TYPES:

  BEGIN OF t_file,

         name TYPE string,

         date TYPE d,

         time TYPE t,

         size TYPE i,

       END OF t_file .

DATA t_tab TYPE TABLE OF t_file .

FIELD-SYMBOLS <t> TYPE t_file.

 

START-OF-SELECTION.

 

OPEN DATASET l_file IN BINARY MODE FOR INPUT.

 

IF sy-subrc NE 0.

  MESSAGE i208(00WITH 'File does not exist.'.

  STOP.

ELSE.

ENDIF.

 

READ DATASET l_file INTO zip_data.

 

CLOSE DATASET l_file.

 

CREATE OBJECT zip.

 

zip->loadzip_data ).

t_tab zip->files.

 

* Convert data

* get more than one file in ZIP

LOOP AT t_tab ASSIGNING <t>.

  l_count l_count + 1.

 

  CALL METHOD zip->get    "也可以用文件名来获取,参考上面的PRESENTATIONSERVER的代码

    EXPORTING

      index   l_count

    IMPORTING

      content unzip_data.

 

  conv_x2c cl_abap_conv_in_ce=>create(        "这里的转换也可以参考上面的代码调用函数

                            encoding    l_encod ).

 

  conv_x2c->convertEXPORTING

                              input unzip_data

                       IMPORTING

                              data  txt_data ).

 

  SPLIT txt_data AT cl_abap_char_utilities=>newline

                 INTO TABLE txt_newline.

 

  FREE txt_data.

 

  LOOP AT txt_newline INTO txt_data.

    SPLIT  txt_data AT cl_abap_char_utilities=>horizontal_tab

                           INTO l_afnam l_banfn l_zprsta

                                l_erdat l_werks l_zploc

                                l_idnlf l_matnr l_menge

                                l_lifnr l_zemergency

                                l_zremark l_elpei

                                l_frgdt l_zmesg l_blckd

                                l_other.

"process the logicl…...

  ENDLOOP.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值