2016-04-01 12 views
1

私はまだJavaを練習していますが、writers、bufferedWritersなどにはあまり使われていません。私はこのメソッドを持っています。サーバにリクエストを行い、返されたイメージを取得して(ファイル名はヘッダにあります) 。これは、画像が保存されている画像がすべて黒(画像の寸法などが正しい)に壊れていることを除き、機能します。誰でもこの問題を引き起こす可能性のあるものを私に教えてもらえますか?このコードスニペットで画像がすべて黒く保存されるのはなぜですか?

private static void getAndSaveImage(String urlStem) throws Exception{ 
    URL url = new URL(urlStem); 
    HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
    con.setRequestMethod("GET"); 
    String fileName = "./" + con.getHeaderField("Content-Disposition").split("filename=")[1]; 
    BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream())); 
    BufferedWriter writer = new BufferedWriter(new FileWriter(fileName)); 
    IOUtils.copy(reader, writer); 
} 

私は現在、このスレッドの答えを調査しています:Getting Image from URL (Java)

私は(私は.PNGファイルを取得することを知っている)可能性のある解決策として、これを試してみましたが、その後、私は、画像ファイルであることを取得後で空になる。

private static void getAndSaveImage(String urlStem) throws Exception { 
    URL url = new URL(urlStem); 
    HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
    con.setRequestMethod("GET"); 
    BufferedImage image = ImageIO.read(con.getInputStream()); 
    String fileName = "./" + con.getHeaderField("Content-Disposition").split("filename=")[1]; 
    File file = new File(fileName); 
    file.createNewFile(); 
    ImageIO.write(image, ".png" , file); 
} 

私は(そのスレッドから変更)とそれを解決:

public static void getAndSaveImage(String imageUrl) throws Exception { 
    URL url = new URL(imageUrl); 
    InputStream is = url.openStream(); 
    HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
    con.setRequestMethod("GET"); 
    String fileName = "./" + con.getHeaderField("Content-Disposition").split("filename=")[1]; 
    OutputStream os = new FileOutputStream(fileName); 
    byte[] b = new byte[2048]; 
    int length; 

    while ((length = is.read(b)) != -1) { 
     os.write(b, 0, length); 
    } 

    is.close(); 
    os.close(); 
} 

が、このスレッドで答え/提案が良好でした。

私は、これは提案の実現であろうと信じている:

public static void saveImage(String imageUrl) throws Exception{ 
    URL url = new URL(imageUrl); 
    HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
    con.setRequestMethod("GET"); 
    String fileName = "./" + con.getHeaderField("Content-Disposition").split("filename=")[1]; 
    FileUtils.copyURLToFile(url, file); 
} 

(悲しいことに、私は2つのヘッダー内のファイル名の情報と画像自体の両方を取得するための要求を得るやっているようです)

答えて

1

代わりにCommons FileUtilsを使用してください。

org.apache.commons.io.FileUtils.copyURLToFile(URL, File) 
関連する問題