• ABAP下载服务器文件到本机


    转自http://blog.sina.com.cn/s/blog_701594f40100l8ml.html

    ABAP:下载服务器文件到本机

    对服务器的文件进行读写操作,SAP提供了OPEN DATASET语句。而下载文件到本地,则可以调用GUI_DOWNLOAD函数。

    由于我们只需要将文件原原本本地进行复制,所以采用BINARY MODE才是比较好的办法,可以支持TXT、PDF、WORD以及任意形式的文件下载。

    DATA: dset TYPE string,
    subrc LIKE sy-subrc,
    leng TYPE i,
    fsize TYPE i VALUE 0,
    buf TYPE c LENGTH 1000,
    tblob LIKE TABLE OF buf.

    dset = '/home/comp/data/test.pdf'.
    OPEN DATASET dset FOR INPUT IN BINARY MODE.
    IF sy-subrc <> 0.
    MESSAGE 'Error: open dataset.' TYPE 'E'.
    ENDIF.

    WHILE subrc = 0.
    leng = 0.
    READ DATASET dset INTO buf ACTUAL LENGTH leng.
    subrc = sy-subrc.
    CHECK leng > 0.
    fsize = fsize + leng.
    APPEND buf TO tblob.
    ENDWHILE.
    CLOSE DATASET dset.

    CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
    bin_filesize = fsize
    filename = 'c: est.pdf'
    filetype = 'BIN'
    TABLES
    data_tab = tblob
    EXCEPTIONS
    OTHERS = 9.

    说明:

    (1)OPEN DATASET时设置IN BINARY MODE,GUI_DOWNLOAD时也是以'BIN'模式,从而实现二进制的直接传送。

    (2)buf的大小决定了每次读取服务器文件中多大量的数据,如果是NON-UNICODE系统,则我们每次读取1000 BYTE(leng=1000);

    如果是UNICODE系统则每次读取2000 BYTE (leng = 2000)。

    (3)要注意READ DATASET语句的返回值sy-subrc,它代表的并非本次读取到了数据与否,而是代表本次读取是否已到达文件结束符。换言之,它代表的是下次是否需要继续读取该文件。

  • 相关阅读:
    无锁队列的实现
    C/C++语言中闭包的探究及比较
    Linus:利用二级指针删除单向链表
    Unix考古记:一个“遗失”的shell
    “C++的数组不支持多态”?
    Alan Cox:单向链表中prev指针的妙用
    二叉树迭代器算法
    C语言全局变量那些事儿
    数据即代码:元驱动编程
    C++模板”>>”编译问题与词法消歧设计
  • 原文地址:https://www.cnblogs.com/rainysblog/p/3833105.html
Copyright © 2020-2023  润新知