2014-09-17 2 views
0

Когда мой запрос GET для изображения возвращает закодированную строку как ‰PNGØßn¥àí»Ø誯ÐPÒäœ?Å'Üë²...Получить изображение из HTTP GET ответа как base64 строка

Как я могу получить изображение в виде строки в кодировке Base64, а не то, что кодирование это?

String url = http://i.stack.imgur.com/tKsDb.png; 

    try{ 

    URL obj = new URL(url); 
    HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 

    // optional default is GET 
    con.setRequestMethod("GET"); 

    //add request header 
    con.setRequestProperty("User-Agent", "Mozilla/5.0"); 

    int responseCode = con.getResponseCode(); 
    System.out.println("\nSending 'GET' request to URL : " + url); 
    System.out.println("Response Code : " + responseCode); 

    BufferedReader in = new BufferedReader(
      new InputStreamReader(con.getInputStream())); 
    String inputLine; 
    StringBuffer response = new StringBuffer(); 

    while ((inputLine = in.readLine()) != null) { 
     response.append(inputLine); 
    } 
    in.close(); 
    System.out.println(response.toString()); 
    //print result 
    return response.toString(); 

ответ

1

Использование javax.mail.internet.MimeUtility

import javax.mail.internet.MimeUtility; 
import java.io.*; 

public class Base64Utils { 

    private Base64Utils() {} 

    public static byte[] encode(byte[] b) throws Exception { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    OutputStream b64os = MimeUtility.encode(baos, "base64"); 
    b64os.write(b); 
    b64os.close(); 
    return baos.toByteArray(); 
    } 

    public static byte[] decode(byte[] b) throws Exception { 
    ByteArrayInputStream bais = new ByteArrayInputStream(b); 
    InputStream b64is = MimeUtility.decode(bais, "base64"); 
    byte[] tmp = new byte[b.length]; 
    int n = b64is.read(tmp); 
    byte[] res = new byte[n]; 
    System.arraycopy(tmp, 0, res, 0, n); 
    return res; 
    } 

Использование Apache Commons

import org.apache.commons.codec.binary.Base64; 

public class Codec { 
    public static void main(String[] args) { 
    try { 
     String clearText = "Hello world"; 
     String encodedText; 

     // Base64 
     encodedText = new String(Base64.encodeBase64(clearText.getBytes())); 
     System.out.println("Encoded: " + encodedText); 
     System.out.println("Decoded:" 
      + new String(Base64.decodeBase64(encodedText.getBytes()))); 
     // 
     // output : 
     // Encoded: SGVsbG8gd29ybGQ= 
     // Decoded:Hello world 
     // 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 
} 

Использование sun.misc.BASE64Encoder

import java.io.IOException; 

import sun.misc.BASE64Decoder; 
import sun.misc.BASE64Encoder; 

// Java Base64 Encoder/Java Base64 Decoder Example 

public class Base64Test { 

    public static void main(String[] args) { 
    BASE64Decoder decoder = new BASE64Decoder(); 
    BASE64Encoder encoder = new BASE64Encoder(); 
    try { 
     String encodedBytes = encoder.encodeBuffer("JavaTips.net".getBytes()); 
     System.out.println("encodedBytes " + encodedBytes); 
     byte[] decodedBytes = decoder.decodeBuffer(encodedBytes); 
     System.out.println("decodedBytes " + new String(decodedBytes)); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    } 
} 

Ссылки: http://www.rgagnon.com/javadetails/java-0598.html http://www.javatips.net/blog/2011/08/how-to-encode-and-decode-in-base64-using-java

0

Ответ не является закодированной строкой, но необработанные байты изображения (т. если вы просто храните байты в файл по мере поступления из этого потока, у вас есть изображение).

Если вам это необходимо, BASE64 закодирован, вы должны сделать это сами.

Смежные вопросы