从base64编码的.zip文件clob重建.zip文件

时间:2017-12-12 08:38:37

标签: java base64 zip clob

我们最近实施了加载" .zip"的功能。来自sFTP的文件。然而,在我们实现功能之前,已经有几个" .zip"那里的文件被视为普通文件" * .xml"文件和下载。现在我有一项任务是将这些下载的文件恢复为zip格式。

ZIP文件被视为xml,并且这样做是按照以下方式下载的,

  

CLOB file = downloadFile(channelSFTP.get(fileName),oConn);

    private static CLOB downloadFile(InputStream is, OracleConnection oConn) throws Exception {
        CLOB clob = CLOB.createTemporary(oConn, true, CLOB.DURATION_SESSION);

        Writer writer = clob.setCharacterStream(1);
        ByteArrayOutputStream result = new ByteArrayOutputStream();

        int length = -1;
        byte[] buffer = new byte[1024];
        while ((length = is.read(buffer)) != -1) {
            result.write(buffer, 0, length);
        }
        result.flush();

        writer.write(result.toString("UTF-8"));
        writer.flush();

        return clob;
    }

然后CLOB从java存储过程返回到oracle过程,并在BASE64中返回ENCODED。

我尝试恢复文件的内容:

public static void decodeZip(String path, String resPath) throws FileNotFoundException, IOException {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        new BASE64Decoder().decodeBuffer(new FileInputStream(path), bos);
        ZipInputStream zis = new ZipInputStream((InputStream) new ByteArrayInputStream(bos.toByteArray()));

        ZipEntry entry;
        while((entry = zis.getNextEntry()) != null) {
            System.out.println(entry.getName());
        }
    }

其中"路径"是BASE64编码文件的路径。但是我收到以下错误:

  

java.util.zip.ZipException:存储的块长度无效

on" zis.getNextEntry()"。我认为应该可以做到这一点,但我似乎无法弄清楚,我错过了什么步骤。

0 个答案:

没有答案