2

URLから複数のファイル(pdf、txt、tiffなどの任意の形式)を読み取り、を使用してそれらを圧縮しようとしていますZipOutputStream。私のコードは次のようになります。

    // using in-memory file read
    // then zipping all these files in-memory
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ZipOutputStream zos = new ZipOutputStream(baos);
    .....

    URL url = new URL(downloadUrl); // can be multiple URLs

    ByteArrayOutputStream bais = new ByteArrayOutputStream();
    InputStream is = url.openStream();
    byte[] byteChunk = new byte[4096];
    int n;

    while ( (n = is.read(byteChunk)) > 0 )
    {
        bais.write(byteChunk, 0, n);
    }

    byte[] fileBytes = bais.toByteArray();

    ZipEntry entry = new ZipEntry(fileName);
    entry.setSize(fileBytes.length);

    zos.putNextEntry(entry);
    zos.write(fileBytes);
    zos.closeEntry();

    // close the url input stream 
    is.close();

    // close the zip output stream
zos.close();


    // read the byte array from ByteArrayOutputStream
    byte[] zipFileBytes = baos.toByteArray();

    String fileContent = new String(zipFileBytes);

次に、このコンテンツ「fileContent」をperlフロントエンドアプリケーションに渡します。

そして、私はこのzipファイルをダウンロードするためにperlコードを使用しています:

WPHTTPResponse::setHeader( 'Content-disposition', 'attachment; filename="test.zip"' );
WPHTTPResponse::setHeader( 'Content-type', 'application/zip');
print $result; // string coming from java application

しかし、それが提供しているzipファイルは破損しています。データ変換に問題があると思います。

助けていただければ幸いです。

4

1 に答える 1

5

あなたの問題は、zipバイトを文字列に出力できると考えていることです。この文字列を使用して、zipコンテンツを再度複製することはできません。生のバイトを使用するか、base64エンコーディングなどの文字列として表現できるものにバイトをエンコードする必要があります。

于 2012-06-20T14:59:37.907 に答える