SAP CPI-如何在CPI中解压缩多个文件

2020-08-30 00:10发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我收到的zip文件包含1个xml文件和1个pdf文件。

因此标准解码器Zip解压缩将无法正常工作,因为它包含多个文件

任何可用于处理此问题的Groovy/Java脚本

预先感谢

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我收到的zip文件包含1个xml文件和1个pdf文件。

因此标准解码器Zip解压缩将无法正常工作,因为它包含多个文件

任何可用于处理此问题的Groovy/Java脚本

预先感谢

付费偷看设置
发送
3条回答
Haoba3210
1楼-- · 2020-08-30 01:06

您好,

有一个类似的要求,即需要脚本并将其附加在答案中。

https://answers.sap.com/questions/391156/error-while-unzipping-files-using-groovy-script。 html

希望这会有所帮助!

感谢和问候,

Praveen T

SC_Yao
2楼-- · 2020-08-30 01:13

嗨,何塞,

示例中的变量zipEntries包含一个zip条目列表。 ZipEntry是一个元数据对象,其中包含有关保存在zip中的文件的有用信息。

要读取实际文件,请将文件名传递给readEntryFromZipAsString函数,如下所示:

(示例显示了如何读取第一个文件。请注意,这应该适用于XML文件。 PDF,您可以调整读取功能,因为PDF应该读取为byte []而不是字符串)

 def myfileContent = readEntryFromZipAsString(bytes,zipEntries [0] .getName())
 
黑丝骑士
3楼-- · 2020-08-30 00:51

您好,

您可以使用Groovy脚本解压缩文件。 我过去曾经使用过以下脚本:

 import com.sap.gateway.ip.core.customdev.util.Message
 导入java.util.zip.ZipInputStream
 导入java.util.zip.ZipEntry


 消息processData(消息){


//将您的zip文件读取到字节数组
 def pkgBytes = ...

//获取ZIP清单
 def zipEntries = extractZipEntries(pkgBytes)

//根据条目执行所需操作
//例如。 将条目名称传递给readEntryFromZipAsString(...)

     返回讯息
 }


 私人extractZipEntries(byte []内容)引发IOException {
     def条目= [];
     ZipInputStream zi = null;
     尝试{
         zi =新的ZipInputStream(新的ByteArrayInputStream(内容));
         ZipEntry zipEntry = null;
         while(((zipEntry = zi.getNextEntry())!= null){
             entry.add(zipEntry);
         }
     }最后{
         如果(zi!= null){
             zi.close();
         }
     }
     返回条目;
 }


 私人readEntryFromZipAsString(byte [] content,def fileName){
 StringBuilder s =新的StringBuilder()
 字节[]缓冲区=新字节[1024]
 读取的int = 0
     ZipInputStream zi = null
     尝试{
         zi =新的ZipInputStream(新的ByteArrayInputStream(内容))
         ZipEntry zipEntry = null
         while(((zipEntry = zi.getNextEntry())!= null){
             如果(zipEntry.name == fileName){
             而((read = zi.read(buffer,0,1024))> = 0){
 s.append(新字符串(缓冲区,0,读)
 }
             }
         }
     }最后{
         如果(zi!= null){
             zi.close()
         }
     }
     返回s.toString()
 }
 

一周热门 更多>