Memory 在内存中创建文件,添加内容并转换为Base64

Memory 在内存中创建文件,添加内容并转换为Base64,memory,abap,Memory,Abap,有一个Web服务正在外部系统中运行。Web服务需要一个Base64编码的XML文件 在我的ABAP程序中,我将XML放在XSTRING变量中发布到Web服务 这里的问题是,字符串的Base64版本和包含相同字符串的文件本质上是不同的 我知道的最直接的解决方案是将字符串写入文件,然后将文件转换为Base64并将其发布到Web服务。这里的问题是,我必须对XML字符串过于敏感,以至于不能临时存储在文件系统中 因此,我的问题是: 是否有一种方法可以在运行时在内存中创建文件,将我拥有的XML添加到内存中的

有一个Web服务正在外部系统中运行。Web服务需要一个Base64编码的XML文件

在我的ABAP程序中,我将XML放在XSTRING变量中发布到Web服务

这里的问题是,字符串的Base64版本和包含相同字符串的文件本质上是不同的

我知道的最直接的解决方案是将字符串写入文件,然后将文件转换为Base64并将其发布到Web服务。这里的问题是,我必须对XML字符串过于敏感,以至于不能临时存储在文件系统中

因此,我的问题是:

是否有一种方法可以在运行时在内存中创建文件,将我拥有的XML添加到内存中的文件中,并最终将其转换为Base64字符串,所有这些都是在运行时创建的,而无需使用实际的文件系统

DATA: lv_xstring TYPE xstring.
xstring = '<document>some xml data</document>'.
数据:lv_xstring类型xstring。
xstring='一些xml数据'。

xstring-->转换为内存中的文件-->转换为Base64字符串

您可以在ABAP中直接将字符串或xstring转换为Base64。检查SCMS_BASE64_ENCODE_STR FM以进行xtsring到BASE64字符串转换


另一方面,通常二进制数据(xstring)作为SOAP主体中的base64编码字符串进行传输。所以,您可能不需要将其转换为base64,只需将xml转换为xstring,然后将其分配给方法参数。

在ABAP中使用类似流的变量会做什么?也许有几种方法可以解决你的问题。您可以将所有数据存储在xstring中,就像您的示例代码块一样,或者您可以使用ABAP和SAP内存。“在内存中创建文件”对我来说没有任何意义,但您可能像在其他编程语言中一样关注流类,例如,您希望创建一个过程来处理输入字符流,在运行时,您可以决定传递流类的实例,该流类可以是文本文件流类、字符串变量流类或数据库CLOB列流类,等等?@SandraRossi添加了我面临的实际问题。希望这能让问题更清楚。@mkysoft我不清楚你想说什么。我已经更新了问题,希望这能让问题更清楚。要求完全不清楚。您可以发布一个HTTP请求,其中包含一个适用于此web服务的“内部文件”(无论它是什么意思)(确保它可以与postman一起工作),然后我们可以回答如何使用ABAP进行此操作。非常感谢。注意:你是说多部分HTTP请求吗?OData?Base64是将字节(xstring)编码为字符序列(string)。要编码字符(字符串)而不是字节,它们必须编码为字节,例如UTF-8非常常见。SCMS_BASE64_ENCODE_STR所做的是将字节编码为BASE64中的字符串。因此,在此之前,必须将输入XML编码为UTF-8。@SandraRossi@mkysoft感谢您的研究,我知道SCMS_STRING_TO_XSTRING将字符串转换为XSTRING,SCMS_BASE64_ENCODE_STR将字符串转换为Unicode。我遇到的问题不是转换,而是如何在memeory中创建文件流,将XML作为其内容并将其转换为字符串,而无需实际将内存中的文件写入文件system@Isuru,我认为您不需要内存系统来执行此操作。在ABAP中从哪里获得XML?是ixmldocument对象吗?您可以根据需要共享更多示例代码。