2016-04-07 8 views
0

残りのAPI呼び出しを介してファイル(さまざまなタイプ - pdf、txt、docx、tifなど)を取得し、そのファイルのバイナリデータをエンコードされていないコードをbase64でエンコードし、ファイルを別の場所に書き出します(別のプロセスがピックアップする)。上記のすべてが動作していますが、ファイルの種類がtxt以外の場合は、新しく書き出されたファイルは開かれません。バイナリデータを読み書きするときの不要なデータ

public File retrieveDocument(String in_ItemId, File in_DestinationFile, Map<String, String> in_DocumentProperties) 
     throws IOException { 
    byte[] binaryData = new byte[8198]; 

    try { 
     String url = "filestore url"; 

     RestTemplate restTemplate = new RestTemplate(); 
     List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>(); 
     messageConverters.add(new MappingJacksonHttpMessageConverter()); 
     restTemplate.getMessageConverters().add(new StringHttpMessageConverter()); 
     restTemplate.setMessageConverters(messageConverters); 

     Map documentMap = restTemplate.getForObject(url, Map.class); 

     if (documentMap.get("binaryData") != null) { 
      binaryData = Base64.decodeBase64(((String) documentMap.get("binaryData")).getBytes()); 
     } 

     OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(in_DestinationFile)); 
     outputStream.write(binaryData); 
     outputStream.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return in_DestinationFile; 
} 

私は、テキストエディタ(すなわち、メモ帳++)で、元のファイルと新しいファイルの両方を開いて、両者を比較すると、追加の文字の数が、新しいファイルに(主に疑問符)があります。以下は、tif画像の例です。新しいファイルのいくつかの追加文字の下に^を追加しました。

オリジナルファイル:

II* P €?à@$ 
    „BaP¸d6ˆDbQ8¤V-ŒFcQ¸äv=HdR9$–M'”JeR¹d¶]/˜LfS9¤Öm7œNgS¹äö}? PhT:%3Ñ©Tºe6O¨ 

    ‡ÄbqX¼f7•ß²<¦W-—ÌfsY¼æw=ŸÐhlÐ=—M§ÔjuZ½f·]¯Øll™-–×m·Ünw[½æ÷}¿à_tœ'Çäry\¾g7hÚsú] 

新しいファイル:私が間違ってやっているのよう

II* P €?à@$ 
    „BaP¸d6ˆDbQ8¤V-ŒFcQ¸äv=?HdR9$–M'”JeR¹d¶]/˜LfS9¤Öm7œNgS¹äö}? PhT:%3Ñ©Tºe6?O¨ 
         ^           ^
    ‡ÄbqX¼f7?•ß²<¦W-—ÌfsY¼æw=ŸÐhlÐ=—M§ÔjuZ½f·]¯Øll™-–×m·Ünw[½æ÷}¿à_tœ'?Çäry\¾g7?hÚsú] 
      ^                ^

任意のアイデア?

+0

'String'は' byte [] 'ではなく' char [] 'のシーケンスです。バイナリデータを表現することは適切ではありません。 –

答えて

2

WriterPrintWriterを含むクラスはテキストデータ用です。 StreamクラスはOutputStreamなどのバイナリデータ用です。

バイナリデータをStringに変換すると、バイナリデータが破損することがあります。

から得られるString strBinaryDataとちょうどbyte[]を除きます。

+0

私はここに何かがありません。 binaryData = Base64.decodeBase64(((String)documentMap());}}};}}}}}}もし、 .get( "binaryData"))。getBytes()); '、ファイルはまったく作成されません。 –

+0

もしあなたがその変更を行ったのであれば、 'strBinaryData'がもうないので、コードに必要な変更がたくさんあります。投稿を編集して現在のバージョンを表示します。 – Kayaman

+0

私は新しいバイト[]をサポートするために他の変更を加えましたが、私の最後のコメントにそれらをリストしていませんでした。それらがうまくいかなかったとき、私は上記の提案と一緒にいくつかのより多くの掘り出しを行い、他のいくつかのことを試しました。提案された変更だけに物事を戻そうとしたとき、私は仕事のプロセスにつまずくことができました。元の投稿を編集して、私が現在行っていることを示すようになりました。ありがとう。 –

関連する問題