ABAP上传pdf文件到对象存储OSS(putObject)

前言

最近刚好有需求需要将凭证打印以pdf文件上传到OSS,找了很多资料没找到合适的,最合适的也就是Amazon S3,有封装好的ABAP SDK,但是需要basis帮忙安装,自己胡乱搞了一番,成功上传到阿里的个人oss了,记录一下关键代码。

可以到阿里oss(对象存储 OSS_云存储服务_企业数据管理_存储-阿里云 (aliyun.com))申请3个月免费使用,用来测试也方便。也可以去看阿里的API文档(OSS API文档 (aliyuncs.com))。

Postman测试

在正式开发之前,直接使用postman等工具进行测试一番,会更容易理解代码思路。

请求方法:PUT

请求URL:http://bucketName.endpoint或者https://bucketName.endpoint

例如:http://zaaron.oss-cn-shanghai.aliyuncs.com/sap/test.pdf

后缀/sap/*.pdf,在oss中没有文件夹的概念,但是可以用 / 来做分隔符,类似文件夹,该url用在putObjeckt中就是将test.pdf文件存入oss的/sap/路径下。

请求头:必须定义参数 Authorization,Date,Content-Type

Authorization

可以在阿里oss控制台中使用签名工具来做测试,需要构建的参数很多,具体可以搜索S3协议,通用的。

Date

Date参数应遵循RFC 1123标准的日期和时间格式,例如:Tue, 30 Jul 2024 11:00:22 GMT。

Content-Type

本例中因为是pdf,所以直接填写 application/pdf,postman上传文件后可以自动解析,如果是开发时,更改为对应的MIME type即可。

Body

选择binary上传文件

如果以上都正确,即可发送文件到oss中。

ABAP实现

拼接Date参数

  DATA: lv_time_ex    TYPE string,
 
ABAP上传 PDF 文件可以通过以下步骤实现: 1. 打开 SE38 ABAP Editor 界面,输入程序名和描述,并在 TYPE-POOLS 中声明 ABAP 程序需要使用的 POOLS: ```ABAP REPORT Z_UPLOAD_PDF. TYPES: BEGIN OF ts_files, filename TYPE string, file_data TYPE string, END OF ts_files. DATA: it_files LIKE STANDARD TABLE OF ts_files. TYPE-POOLS: truxs. ``` 2. 打开 SE80 ABAP Workbench 界面,选择出入口(Programs,Classes,Function Groups等),创建程序,选择“FUNCTION GROUP”选项: 3. 在“FUNCTION MODULES”选项中,创建一个新的 Function Module,并添加以下代码: ```ABAP FUNCTION Z_UPLOAD_PDF. *"---------------------------------------------------------------------- *"*"Local Interface: *" TABLES *" IT_FILES STRUCTURE TS_FILES *"---------------------------------------------------------------------- DATA: lv_filesize TYPE i. DATA: lv_filedescr TYPE string. DATA: lv_filename LIKE LINE OF it_files. DATA: ld_wa TYPE truxs_t_pdf_pdfoptions. LOOP AT it_files INTO ld_wa. CLEAR lv_filename. lv_filename = ld_wa-filename. CALL FUNCTION 'GUI_UPLOAD' EXPORTING filename = lv_filename filetype = 'BIN' has_field_separator = 'X' TABLES data_tab = ld_wa-file_data EXCEPTIONS file_open_error = 1 file_read_error = 2 no_batch = 3 gui_refuse_filetransfer = 4 invalid_type = 5 no_authority = 6 unknown_error = 7 bad_data_format = 8 header_not_allowed = 9 separator_not_allowed = 10 header_too_long = 11 unknown_dp_error = 12 access_denied = 13 dp_out_of_memory = 14 disk_full = 15 dp_timeout = 16 OTHERS = 17. IF sy-subrc NE 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. EXIT. ENDIF. lv_filesize = xstrlen( ld_wa-file_data ). IF lv_filesize > 0. lv_filedescr = 'PDF File Uploaded Successfully!!!'. PERFORM send_email USING lv_filename ld_wa-file_data lv_filedescr. MESSAGE s014(zmsg) TYPE 'I' DISPLAY LIKE 'E'. ENDIF. ENDLOOP. ENDFUNCTION. ``` 4. 在“ATTRIBUTES”选项中,为函数添加输入参数和输出参数,输入参数包括传递的 PDF 文件名和数据,输出参数为成功上传的消息。 5. 在主程序中,调用 Function Module,并为 IT_FILES 赋值: ```ABAP CLEAR it_files. ld_wa-filename = 'C:\uploads\test_pdf.pdf'. ld_wa-file_data = it_pdf[]. APPEND ld_wa TO it_files. CALL FUNCTION 'Z_UPLOAD_PDF' TABLES it_files = it_files. ``` 6. 在文件上传成功后,可以通过邮件或其他方式通知用户。在此实例代码中,调用 send_email Function Module 发送电子邮件,可以将其扩展为其他通知方式。 通过这些步骤,就可以在 ABAP 中实现上传 PDF 文件的功能。每个企业系统都有其特定的业务需求,因此需要根据自身需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值