【问题标题】:Can a byte array be passed to an outbound file transport in mule ESB可以将字节数组传递给mule ESB中的出站文件传输吗
【发布时间】:2016-06-14 22:13:54
【问题描述】:

我有一个 java 组件,它正在压缩一个 csv 文件并从 ByteArrayOutputStream 返回一个字节数组。我正在尝试将此传递给要写入操作系统的文件传输。文件已写入操作系统,但当我尝试打开该文件时,Windows 报告该文件无效。首先,是否可以将字节数组发送到文件传输?如果是这样,那么我想我可能不得不发布另一个问题,关于我在压缩 csv 内容时做错了什么......

这是java的sn-p:

    List<String> csvFiles = (List<String>)message.getPayload();

    InputStream originalFile = null;
    ByteArrayOutputStream dest = new ByteArrayOutputStream();
    ZipOutputStream out = new ZipOutputStream(dest); 

    File temp = new File("users.csv");
     originalFile = new 
       ByteArrayInputStream((csvFiles.get(0)).toString().getBytes());
     ZipEntry entry = new ZipEntry(temp.getPath());
     out.putNextEntry(entry);
     int count;
     while((count = originalFile.read()) != -1) {
        out.write(count);
     }
     originalFile.close();
     byte[] zipFileByteArray = dest.toByteArray();
     out.close();
     dest.close();
    return zipFileByteArray;

这是我的流程的相关部分:

 <flow name="zip-csv">
    <component class="edu.ucdavis.iet.canvas.ZipFiles" doc:name="Java"/>
    <file:outbound-endpoint path="${message_archive.dir}" responseTimeout="10000" doc:name="save message to dir" outputPattern="temp.zip"/>
 </flow>

【问题讨论】:

  • 在访问 dest.toByteArray() 之前,您可能缺少 out.flush()
  • 很遗憾,这不起作用。不过,谢谢。
  • @geert3 @GarySharpe 与其说是out.flush(),不如说是之前的out.close()。您需要关闭 ZIP 流以进行正确的校验和计算,以便在缓冲区刷新“东西”之上计算并变为可刷新。
  • 您可以尝试将字节数组写入您的 Java 组件中的文件吗?只是为了确保字节数组没问题。

标签: java mule


【解决方案1】:

我建议使用@anupambhusari 为这个问题提交的 ZipTransformer 类:

Mule Zip File and send zipped file towards FTP server

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-26
    • 2021-04-27
    • 1970-01-01
    相关资源
    最近更新 更多