- 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.
————————————————————————————————————————————————
- How to decompress zip file
- On presentation server
REPORT zflx_test.
TYPES:
t_xline(2048) TYPE x, "BINARY FILES
BEGIN OF t_line,
line(1024) TYPE c,
END OF t_line. "CONTENT
DATA:
size TYPE i.
DATA: l_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
DATA: l_file TYPE string, l_path TYPE localfile.
DATA l_encod TYPE abap_encod VALUE 'NON-UNICODE'.
* ZIP info
DATA: zip_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(00) WITH 'File does not exist.'.
STOP.
ELSE.
ENDIF.
READ DATASET l_file INTO zip_data.
CLOSE DATASET l_file.
CREATE OBJECT zip.
zip->load( zip_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->convert( EXPORTING
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.