2016-04-08 27 views
7

重複しているかもしれませんが、Http Postのために画像をBase64に変換するには何らかの問題に直面しています。私はこのコードを試しましたが、それは間違ってエンコードされた文字列を与えましたイメージをjavaのbase64文字列に変換するには?

public static void main(String[] args) { 

      File f = new File("C:/Users/SETU BASAK/Desktop/a.jpg"); 
      String encodstring = encodeFileToBase64Binary(f); 
      System.out.println(encodstring); 
     } 

     private static String encodeFileToBase64Binary(File file){ 
      String encodedfile = null; 
      try { 
       FileInputStream fileInputStreamReader = new FileInputStream(file); 
       byte[] bytes = new byte[(int)file.length()]; 
       fileInputStreamReader.read(bytes); 
       encodedfile = Base64.encodeBase64(bytes).toString(); 
      } catch (FileNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      return encodedfile; 
     } 

出力:677327b6

@
[Bしかし、私は多くのオンラインエンコーダでBase64にこの同じ画像を変換し、それらのすべてが正しいの大きなBase64文字列を与えました。

編集:どのように重複ですか?私の複製であるリンクは、私が望む文字列を変換する解決策を与えません。

私はここで何が欠けていますか?

+0

はどのようにして、これは間違ったベース64文字列であると判断していますか? –

+0

オンラインエンコーダは大きな文字列を返します。 –

+0

POSTメソッドのコードを提供できますか?私は同じ問題に陥っています(画像を投稿してください...)ありがとう!! – Yekatandilburg

答えて

15

問題は、あなたがバイト配列を返しますBase64.encodeBase64(bytes)への呼び出しのtoString()に戻ってきているということです。だから最終的にはバイト配列のデフォルトの文字列表現が得られます。これは得られる出力に対応しています。

代わりに、あなたが行う必要があります。

encodedfile = new String(Base64.encodeBase64(bytes), "UTF-8"); 
+0

それが解決しました –

+2

String strBase64 = Base64.encodeToString(byteArray、 0) –

0

これは私にとってそれでした。 Base64.Defaultへの出力フォーマットのオプションを変更することができます。

// encode base64 from image 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
imageBitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); 
byte[] b = baos.toByteArray(); 
encodedString = Base64.encodeToString(b, Base64.URL_SAFE | Base64.NO_WRAP); 
+0

私の画像ファイルをどこに送るのですか? –

+0

ここでは、imageBitmapにロードされます。メソッド.compressはそれをバオに変換して符号化します – MojioMS

+0

Base64.URL_SAFEこれらは私のために働いていませんか?何をインポートするのですか? –

4

私はあなたが望むかもしれないと思う:

String encodedFile = Base64.getEncoder().encodeToString(bytes); 
+0

import org.apache.commons.codec.binary.Base64;私はこれをここでインポートしています。ここではBase64にはgetEncoder()のようなものはありません –

+0

@setubasak Java 8で 'java.util.Base64'が追加されました。 – Pshemo

関連する問題