1

メッセージ ハブからファイルをフェッチするのに役立つ Web サービスを使用しています。ファイルの種類は、XML または ZIP のいずれかです。

ZIP ファイルの場合、コンテンツ タイプはバイナリです。

私はこのコードを持っています:

private String extractPayload(String filePath, AttachmentPart attach){

        FileOutputStream fileStream = null;

        try {
              DataHandler handler;
              handler = attach.getDataHandler();

              File f = new File(filePath);

              fileStream = new FileOutputStream(filePath);

              handler.writeTo(fileStream);

              fileStream.flush();

        } catch (Exception ex) {

              logger.info("####Exception:" + ex.getMessage());

        } finally {

              if (fileStream != null)
                    fileStream.close();

        }

        return filePath;

}

現在、コードは XML ファイルを取得するために正常に動作しますが、ZIP ファイルの場合、ファイルが破損していることが判明しました。Messaging Hub からファイル ユーティリティを使用して同じファイルをダウンロードしたところ、SOAP 添付ファイルを介して取得したファイルのサイズが実際のサイズより約 4 バイト大きいことがわかりました。

更新 :添付ファイルのエンコーディングは 7 ビット (邪魔になる場合) ですが、別の zip を含む別の添付ファイルは Quote-printable にエンコードされています。両方の zip が同じ Web サービスからフェッチされており (ただし、エンコーディングは異なります)、どちらも破損しています。

編集:ファイルを受信して​​いるエンコーディングに問題があると強く感じています。実際のファイルと受信した添付ファイルの比較を次に示します。

実際のファイル サイズ : 9031 バイト 受信した添付ファイル サイズ : 9066 バイト

ドキュメント エディターで両方のファイルを比較して、両方の違いを見つけようとしました。元のファイルと取得した添付ファイルの違い (バイナリ エディタ):

ed を 3f に変更、db を 3f に変更、d6 を 3f に変更、85 を 3f に変更、d0 を 3f に変更、

等々。

zip ファイルには、PDF ファイルと XML ファイルが含まれています。

両方のファイルの開始行は類似しており、PK で始まります

4

1 に答える 1

3

あなたbufは2048バイトの配列だと思います。次の変更を試してください

交換

fileStream.write(buf);

これとともに

fileStream.write(buf, 0, n);

これは、最後の読み取りで 1024 バイトしか取得できず、残りの 1024 バイトにbufガベージ値が含まれ、ファイルに書き込まれて破損する場合に備えて修正するためのものです。

于 2013-03-27T04:31:27.433 に答える