ABAP-附件上传及下载

*&---------------------------------------------------------------------*
*& Report  Y_CLY_FILE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT Y_CLY_FILE.


DATA: GT_FILENAME   TYPE FILETABLE.
DATA: GS_FILENAME   TYPE FILE_TABLE.

DATA: GV_SUBRC01    TYPE SY-SUBRC.
DATA: GT_BIN        TYPE SRM_T_BINTAB.  " SRM_T_BINTAB 二进制表

"文件名
DATA: GV_FILE_FULL TYPE CHAR255. " 文件名字 char255
DATA: GV_FILE_ALL  TYPE CHAR255.
DATA: GV_FILE_ADD  TYPE CHAR10.
DATA: GV_FILE_LEN  TYPE I.

START-OF-SELECTION.

  PERFORM FRM_SHOW_FILE_SELECT.
  CHECK NOT GV_FILE_FULL IS INITIAL.
  PERFORM FRM_ADD_ATTACHMENT.
  PERFORM FRM_UCOMM_9100_FJ_DOWN USING GV_FILE_ALL.


*&---------------------------------------------------------------------*
*&      Form  FRM_SHOW_FILE_SELECT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_SHOW_FILE_SELECT .
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
    EXPORTING
      INITIAL_DIRECTORY       = 'C:'
      MULTISELECTION          = 'X'
    CHANGING
      FILE_TABLE              = GT_FILENAME
      RC                      = GV_SUBRC01
*     USER_ACTION             =
    EXCEPTIONS
      FILE_OPEN_DIALOG_FAILED = 1
      CNTL_ERROR              = 2
      ERROR_NO_GUI            = 3
      OTHERS                  = 4.

  READ TABLE GT_FILENAME INTO GS_FILENAME INDEX 1.

  IF SY-SUBRC EQ 0.
    GV_FILE_FULL =  GS_FILENAME-FILENAME.
    TRANSLATE GV_FILE_FULL TO UPPER CASE.
  ENDIF.
ENDFORM.                    "FRM_SHOW_FILE_SELECT
*&---------------------------------------------------------------------*
*&      Form  FRM_ADD_ATTACHMENT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM FRM_ADD_ATTACHMENT .

  DATA LV_FNAME  TYPE STRING.
  DATA LV_EXTENSTION TYPE C LENGTH 255 .

  CONDENSE GV_FILE_FULL .
  LV_FNAME = GV_FILE_FULL.
  "转化为二进制table
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD
    EXPORTING
      FILENAME                = LV_FNAME
      FILETYPE                = 'BIN'
    IMPORTING
      FILELENGTH              = GV_FILE_LEN
    CHANGING
      DATA_TAB                = GT_BIN
    EXCEPTIONS
      FILE_OPEN_ERROR         = 1
      FILE_READ_ERROR         = 2
      NO_BATCH                = 3
      GUI_REFUSE_FILETRANSFER = 4
      NO_AUTHORITY            = 6
      UNKNOWN_ERROR           = 7
      BAD_DATA_FORMAT         = 8
      UNKNOWN_DP_ERROR        = 12
      ACCESS_DENIED           = 13
      OTHERS                  = 17.
  IF SY-SUBRC <> 0.
  ENDIF.

  "获取文件名(不含路径)
  CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH'
    EXPORTING
      FULL_NAME     = LV_FNAME
    IMPORTING
      STRIPPED_NAME = GV_FILE_ALL
    EXCEPTIONS
      X_ERROR       = 1
      OTHERS        = 2.
  IF SY-SUBRC <> 0.
  ENDIF.

  "  "获取后缀名
  CALL FUNCTION 'TRINT_FILE_GET_EXTENSION'
    EXPORTING
      FILENAME  = GV_FILE_ALL
    IMPORTING
      EXTENSION = GV_FILE_ADD.
  IF SY-SUBRC <> 0.
  ENDIF.

  CONDENSE GV_FILE_ADD NO-GAPS.


ENDFORM.                    "FRM_ADD_ATTACHMENT
*&---------------------------------------------------------------------*
*&      Form  FRM_UCOMM_9100_FJ_DOWN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_UCOMM_9100_FJ_DOWN USING PV_NAME.


  DATA: LV_TITLE    TYPE STRING,
        LV_FOLDER   TYPE STRING,
        LV_FILENAME TYPE STRING.

  DATA: LT_TAB TYPE SBDST_CONTENT,
        LS_TAB LIKE LINE OF LT_TAB.

  LV_TITLE = TEXT-202. "选择路径

* 取目录
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_BROWSE
    EXPORTING
      WINDOW_TITLE         = LV_TITLE
    CHANGING
      SELECTED_FOLDER      = LV_FOLDER
    EXCEPTIONS
      CNTL_ERROR           = 1
      ERROR_NO_GUI         = 2
      NOT_SUPPORTED_BY_GUI = 3
      OTHERS               = 4.
  IF SY-SUBRC = 0.
*    下载文件


    CLEAR LV_FILENAME.
    CONCATENATE LV_FOLDER '\' PV_NAME INTO LV_FILENAME.

    REFRESH: LT_TAB[].
    CLEAR LS_TAB.

    DATA: LV_LINE TYPE I.        " 流文件 长度
    DATA: LV_OPT  TYPE I.        " 流文件 1022 分割位置
    DATA: LV_DIV  TYPE I.        " 流文件 1022 莫 =  11
    DATA: LV_MOD  TYPE I.        " 流文件 1022 余 =  909
    DATA: LV_ZZLINE TYPE EDOC_FILE.  " 流 格式 RAWSTRING 文档内容

*    SELECT SINGLE ZZLINE INTO LV_ZZLINE FROM ZFITDQ10370
*      WHERE ZZID  = PV_ZZID.

    LV_LINE = XSTRLEN( LV_ZZLINE ).     " 长度

    LV_MOD = LV_LINE MOD 1022.
    LV_DIV = LV_LINE DIV 1022.

    IF LV_DIV = 0.
      LS_TAB-LINE = LV_ZZLINE+0(LV_MOD).
      APPEND LS_TAB TO LT_TAB.
      CLEAR: LS_TAB.
    ELSE.
      DO LV_DIV TIMES.
        LV_OPT = ( SY-INDEX - 1 ) * 1022.
        LS_TAB-LINE = LV_ZZLINE+LV_OPT(1022).
        APPEND LS_TAB TO LT_TAB.
        CLEAR: LS_TAB.
      ENDDO.

      IF LV_MOD NE 0.
        LV_OPT = LV_OPT + 1022.
        LS_TAB-LINE = LV_ZZLINE+LV_OPT(LV_MOD).
        APPEND LS_TAB TO LT_TAB.
        CLEAR: LS_TAB.
      ENDIF.
    ENDIF.

    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
        FILENAME                = LV_FILENAME
        FILETYPE                = 'BIN'
      TABLES
        DATA_TAB                = LT_TAB
      EXCEPTIONS
        FILE_WRITE_ERROR        = 1
        NO_BATCH                = 2
        GUI_REFUSE_FILETRANSFER = 3
        INVALID_TYPE            = 4
        NO_AUTHORITY            = 5
        UNKNOWN_ERROR           = 6
        HEADER_NOT_ALLOWED      = 7
        SEPARATOR_NOT_ALLOWED   = 8
        FILESIZE_NOT_ALLOWED    = 9
        HEADER_TOO_LONG         = 10
        DP_ERROR_CREATE         = 11
        DP_ERROR_SEND           = 12
        DP_ERROR_WRITE          = 13
        UNKNOWN_DP_ERROR        = 14
        ACCESS_DENIED           = 15
        DP_OUT_OF_MEMORY        = 16
        DISK_FULL               = 17
        DP_TIMEOUT              = 18
        FILE_NOT_FOUND          = 19
        DATAPROVIDER_EXCEPTION  = 20
        CONTROL_FLUSH_ERROR     = 21
        OTHERS                  = 22.
    IF SY-SUBRC <> 0.

    ENDIF.

  ENDIF.
ENDFORM.                    " FRM_UCOMM_9100_FJ_DOWN

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值