前言
在项目中有时候需要上传文件到服务器、读取服务器文件的需求 ,例如将物料的款式图片上传到服务器,然后在需要的地方显示图片。
本篇文章将介绍具体的操作方法,并使用ABAP代码将常用的方法进行了封装,便于调用
基础
• AL11 服务器上的路径和文件
• CG3Y 下载文件
• CG3Z 上传文件
写入文件示例:
TYPES:BEGIN OF ty_tab, line(255) TYPE x, END OF ty_tab .DATA: ls_tab TYPE ty_tab, lt_tab TYPE STANDARD TABLE OF ty_tab. OPEN DATASET iv_filename FOR OUTPUT IN BINARY MODE.IF sy-subrc EQ 0. LOOP AT lt_tab INTO DATA(ls_tab). TRANSFER ls_tab TO iv_filename. ENDLOOP. CLOSE DATASET iv_filename.ENDIF.读取文件 示例 :
OPEN DATASET iv_filename FOR INPUT IN BINARY MODE.DO. READ DATASET iv_filename INTO ls_tab ACTUAL LENGTH DATA(bytes). IF sy-subrc <> 0. EXIT. ENDIF. APPEND ls_tab TO lt_tab.ENDDO.CLOSE DATASET iv_filename.
删除文件 示例 :
*
DELETE DATASET iv_filename .
方法封装
文件的上传、读取、下载、删除等方法封装在了 zcl_common类 中,具体代码可参见文末github仓库地址
测试代码
见测试程序ZDEMO_DATASET
*&---------------------------------------------------------------------**& Report ZDEMO_DATASET*&---------------------------------------------------------------------**&*&---------------------------------------------------------------------*REPORT zdemo_dataset."选择上传文件名DATA(lv_filename) = zcl_common=>get_file_name( ).CHECK lv_filename IS NOT INITIAL."上传到服务器DATA(rs_return) = zcl_common=>upload_file_to_server( iv_filename = lv_filename ).IF rs_return-return-type = 'E'. MESSAGE rs_return-return-message TYPE 'S' DISPLAY LIKE 'E'. RETURN.ENDIF."拆分文件路径DATA(ls_split) = zcl_common=>split_file( rs_return-filename )."获取保存路径DATA(lv_filename1) = zcl_common=>save_file_dialog( iv_filename = ls_split-filename )."从服务器下载文件到本地DATA(rs_return1) = zcl_common=>download_file_from_server( iv_filename_server = rs_return-filename iv_filename_client = lv_filename1 ).IF rs_return1-type = 'E'. MESSAGE rs_return1-message TYPE 'S' DISPLAY LIKE 'E'. RETURN.ENDIF.代码逻辑为:从本地选择一个文件,上传到服务器,然后再从服务器下载下来存储到本地.
upload_file_to_server方法默认将文件上传到服务器/usr/sap/trans文件夹下,可修改此路径
总结
完整代码见Github
地址:https://github.com/a87b01c14/ZCL_COMMON.git