使用 JavaScript 上传 PDF 和 Excel 等二进制文件到 ABAP 服务器并进行解析-阿里云开发者社区

开发者社区> python技术君> 正文

使用 JavaScript 上传 PDF 和 Excel 等二进制文件到 ABAP 服务器并进行解析

简介: 使用 JavaScript 上传 PDF 和 Excel 等二进制文件到 ABAP 服务器并进行解析
+关注继续查看

这是 Jerry 2021 年的第 71 篇文章,也是汪子熙公众号总共第 348 篇原创文章。


Jerry 之前发布过一篇文章 不使用任何框架,手写纯 JavaScript 实现上传本地文件到 ABAP 服务器,之后不少朋友留言,提出的问题概括为以下两类:


(1) 客户端通过 multipart/form-data 格式发送的数据,ABAP 端除了像 Jerry 文章采取字符串解析这种比较繁琐的方式处理外,还有其他方法吗?


(2) 能否上传二进制文件比如 Excel 到 ABAP 并进行解析?

image.png

使用 JavaScript 通过 multipart/form-data 格式发送 PDF 和 Excel 文件到 ABAP 服务器

关于 multipart/form-data 格式的详细说明,参考 Mozilla 开发社区和 W3 Org 的文档:


https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects


https://www.w3.org/html/wg/spec/association-of-controls-and-forms.html#multipart-form-data


我在前文例子的基础上稍作修改,在 Form 里使用两个类型为 file 的 input 标签,分别上传 PDF 和 Excel 文件:


image.png

image.png

image.png

image.pngimage.pngimage.pngimage.pngimage.png

现在已经有很多开源工具比如 JavaScript 库可以用来生成和解析 PDF 文件了,感兴趣的朋友可以在搜索引擎里搜索 Jerry 这几篇文章:


使用 ABAP 和 JavaScript 代码生成 PDF 文件的几种方式

使用 JavaScript 将当前页面保存成 PDF,支持图片和文字的保存

PDF 文件如何转成 markdown 格式

对于上传到 ABAP 服务器的 PDF 文件的文件名,我们仍然采取和前一篇文章同样的方式解析,从下图红色矩形框中的字符串中提取。

image.pngimage.png

当 ABAP 服务器接收到的客户端数据格式为 multipart/form-data 时,调用 CL_HTTP_REQUEST 的num_multiparts 方法可以得到 parts 的个数,再使用 get_multipart 方法,传入每个 part 的索引,就可以得到代表这个 part 的一个实例引用。


调用该引用的get_content_type 和 get_data 方法,就能解析出上传文件的类型(比如 pdf 格式对应的 application/pdf)和二进制内容。


至此调用 SAP CRM 附件创建 API 的三大参数:文件名,文件类型和文件二进制内容均已就绪,调用 API 即可将上传的 PDF 和 Excel 数据,创建成为 SAP CRM 销售订单的附件。

image.pngimage.pngimage.png

如何使用 ABAP 解析上传的 Excel 文件

这个话题,其实 Jerry 2019 年的文章 使用ABAP操作Excel的几种方法 已经系统介绍过。


我们在 ABAP 调试器里观察到,本地扩展名为 xlsx 的 Excel 文件,上传到 ABAP 服务器时,其 content-type 为:

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

image.pngimage.pngimage.pngimage.png image.pngimage.png

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
C++实践参考——用二进制文件处理学生成绩
【项目-用二进制文件处理学生成绩】 (1)定义学生类,其中包含学号、姓名、C++课、高数和英语成绩及总分数据成员,成员函数根据需要确定。 (2)读入学生的成绩,并求出总分,用对象数组进行存储。ASCII文件score.dat中保存的是100名学生的学号、姓名和C++课、高数和英语成绩。 (3)将所有数据保存到一个二进制文件binary_score.dat中,最后通
875 0
【转】Android下使用Properties文件保存程序设置
原文:http://jerrysun.blog.51cto.com/745955/804789 废话不说,直接上代码。    读取.properties文件中的配置:  String strValue = "";  Properties props = new Properties();  try {      props.
600 0
C++实践参考——二进制文件浏览器
【项目-二进制文件浏览器】 (1)做一个类似BinaryViewer的查看二进制文件的程序,输入文件名后,可以以16进制和ASCII对照的方式列出该文件的内容,可以参考下图: 提示:循环中,一次读入16个字节,先用16进制形式输出,再用字符形式输出。 [参考解答] #include<iostream> #include<iomanip&g
869 0
使用http-server搭建静态文件服务器
本文介绍几种搭建静态文件服务器的方式,着重介绍基于node的http-server用法。
1817 0
C++ 中使用boost::property_tree读取解析ini文件
boost 官网 http://www.boost.org/ 下载页面 http://sourceforge.net/projects/boost/files/boost/1.53.0/ 我下载的是 boost_1_53_0.
1990 0
使用阿里云容器服务 ACK 和文件存储 NAS 构建现代化企业应用
大规模构建容器化应用程序需要高可靠、弹性、共享且支持高性能数据处理的数据存储解决方案。通过迁移到公共云,企业可以获得更高的生产效率和更低的成本。阿里云文件存储可以为现代化应用提供强健的数据稳定性,可靠性,高性能和在线扩展能力。
1365 0
JS判断服务器端文件是否存在(三)
在前端JS操作时,有时候需要判断一下文件是否存在,如图片。 数据库中存在了这个值,然后直接在前端显示这个图片。 这是不正确的。例如,在数据库中存放的是 /image/user.jpg ; 而实际上这张图片被存放在GWML/image/user.jpg, 这个时候设置图片target.attr(src,path); 是不正确的,是取不出来的。 应该先判断一下这个path路径是不是有这张图片。 如果没有的话,显示错误图片或者默认图片,如果有的话,则显示正确的图片。
8 0
1853
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础HTML入门教程》
立即下载
《零基础CSS入门教程》
立即下载