sap 服务器文件 暴露pdf地址,访问地址预览

sap 服务器文件外部系统不可直接访问,通常通过数据流传输,受 sap 外部服务 pingpong 游戏启发,文件应该也可直接在html 格式拼写处理,从而实现直接预览,以下为实现代码:

1.sicf 创建服务服务

2.服务创建处理类

3.类代码编写

        其中访问地址可拼接单号参数,通过参数获取对应单号文件上传附件路径,读取服务器文件,将文件转为64位数据流(正常接口传输pdf可转64位后直接传输,传输到其他系统java或其他可处理),然后在数据前后拼接html 处理代码格式,包括长宽调整,其中pdf处理 需 embed 处理或 iframe 处理也可 ,若是处理图片 img 即可 ,ps:img 处理不了 pdf,且测试代码 只适用谷歌, ie不行。

 编写完成,即可访问测试服务

 DATA: lt_fields TYPE tihttpnvp,
        ls_fields LIKE LINE OF  lt_fields,
        str1      TYPE string,
        lv_vbeln  TYPE numc10.
  DATA: lv_file   TYPE string.
  DATA: lv_msg    TYPE string.
  DATA: lv_xstr   TYPE xstring.
  DATA: lt_xtab   TYPE STANDARD TABLE OF sdokcntbin.

" get HEADER fields
  server->request->get_header_fields( CHANGING fields = lt_fields   ).

  READ TABLE lt_fields INTO ls_fields WITH KEY name = '~query_string'.
  IF sy-subrc = 0.
    SPLIT ls_fields-value AT '&' INTO str1 lv_vbeln .
    IF lv_vbeln IS INITIAL.
      RETURN.
    ENDIF.
  ELSE.
    RETURN.
  ENDIF.

  SELECT SINGLE sfile INTO lv_file
    FROM zsd1000t001
   WHERE potyp = '2'
     AND vbeln = lv_vbeln.
  IF sy-subrc <> 0.
    RETURN.
  ENDIF.

  lv_file = '/usr/sap/tmp/13.PDF'.
*  lv_file = '/usr/sap/tmp/12.PFCG'.

  OPEN DATASET lv_file FOR INPUT IN BINARY MODE MESSAGE lv_msg.
  IF sy-subrc <> 0.
    RETURN.
  ENDIF.

  FREE lt_xtab.
  WHILE sy-subrc = 0.
    READ DATASET lv_file INTO lv_xstr.
    IF sy-subrc = 0.
      cl_bcs_convert=>xstring_to_xtab(
        EXPORTING
          iv_xstring   = lv_xstr
        IMPORTING
          et_xtab      = lt_xtab ).
    ENDIF.
  ENDWHILE.
  CLOSE DATASET lv_file.

  CLEAR lv_xstr.
  lv_xstr = cl_bcs_convert=>xtab_to_xstring( lt_xtab ).

  DATA(lv_str) = cl_do_cr_cast=>xstring2base64( iv_xstring = lv_xstr ).
*pdf
  lv_str = |<!DOCTYPE html><html><body><embed src="data:application/pdf;base64,{ lv_str }" width="100%" height="1000" ></body></html>|.
*jpg
*  lv_str = |<!DOCTYPE html><html><body><img src="data:application/pdf;base64,{ lv_str }" ></body></html>|.

  IF lv_str IS NOT INITIAL.
    server->response->set_cdata( data = lv_str ).
  ENDIF.

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值