2016-09-22 101 views
2

我一直在試圖通過java從url下載圖片。
我試圖用很多方法解決它,但我沒有成功。如何在java中從url下載圖片?

我在寫我的方式希望有人會發現哪裏出了問題:

隨着第一和第二方面,我碰到下面的錯誤,而我試圖打開圖像:

...文件似乎已損壞,損壞或太大

...並且其大小比應該小。

我想這與編碼有關。

第一種方式:

URL url = new URL("http://www.avajava.com/images/avajavalogo.jpg"); 
InputStream in = url.openStream(); 
Files.copy(in, Paths.get("someFile.jpg"), StandardCopyOption.REPLACE_EXISTING); 
in.close(); 

方式二:

File f= new File("c:\\image.jpg"); 
URL myUrl = new URL("http://www.avajava.com/images/avajavalogo.jpg"); 
FileUtils.copyURLToFile(myUrl, f); 

隨着3路,我得到異常在thread "main" java.lang.IllegalArgumentException: image == null!

第三條道路:

URL url = new URL("http://www.avajava.com/images/avajavalogo.jpg"); 
BufferedImage img = ImageIO.read(url); 
File file = new File("downloaded.jpg"); 
ImageIO.write(img, "jpg", file); 

我真的需要你 幫幫我!!!我很久以前一直試圖解決它,但沒有成功。

在此先感謝!

+0

這裏檢查[this](http://stackoverflow.com/a/5882039/5223322)out。這將幫助你 –

+2

第一種方法在我身邊 –

+0

請在第一種情況下附上你的下載文件,這樣我們可以驗證它是否真的被損壞。 另外,我會嘗試通過其他方式下載它,並在那個和java下載的一個比較,看看是什麼dfiference – Ivan

回答

5

您必須指定在方式3目標文件的完整位置,

 URL url = new URL("http://www.avajava.com/images/avajavalogo.jpg"); 
     BufferedImage img = ImageIO.read(url); 
     File file = new File("D:\\image\\downloaded.jpg"); 
     ImageIO.write(img, "jpg", file); 

它的工作對我罰款

-1

我嘗試的第一個解決方案,它工作得很好,一旦我設置正確的代理服務器設置作爲VM參數。這可能也可以解釋你的問題。要使用正確的代理,提供從你的IDE或命令行下面的VM參數(無論你正在運行的應用程序)來設置正確的代理服務器的主機名和端口:

-Dhttp.proxyHost=10.0.0.1 -Dhttp.proxyPort=8080 

要弄清楚當前的代理設置,開啓並且轉到以下URL:

chrome://net-internals/#proxy 
+0

只是因爲你使用代理,並不意味着他是。 – Kayaman

+0

是的。但是,代碼很好。因此,人們可以得出結論,其他事情正在導致這個問題。就我而言,代理設置將是主要的嫌疑犯。 –