Chinaunix首页 | 论坛 | 博客
  • 博客访问: 343482
  • 博文数量: 25
  • 博客积分: 3011
  • 博客等级: 中校
  • 技术积分: 367
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-28 13:22
个人简介

生命在于折腾

文章分类

全部博文(25)

文章存档

2015年(1)

2011年(3)

2010年(4)

2009年(17)

我的朋友

分类: 敏捷开发

2009-10-19 16:26:00

对服务器的文件进行读写操作,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:\test.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,它代表的并非本次读取到了数据与否,而是代表本次读取是否已到达文件结束符。换言之,它代表的是下次是否需要继续读取该文件。
 
阅读(5441) | 评论(3) | 转发(2) |
给主人留下些什么吧!~~

chinaunix网友2009-11-02 17:07:53

再来转转 收藏了先

chinaunix网友2009-10-22 09:58:28

IN BINARY MODE与IN TEXT MODE的区别在于是否进行解码,前者不解码,后者解码;ENCODING UTF-8/NON-UNICODE 则代表如何解码。

chinaunix网友2009-10-22 09:30:36

赞一个,刚好前段时间我用到了这个,volcano留