Java:使用URL下載圖片為何圖片下載不完全呢?
問題描述
public class Client { public static void main(String[] args) {try { URL url = new URL('http://www.iteye.com/upload/logo/user/1177132/a7159cc1-b11a-3122-9a9d-5183d6c6ba99.jpg'); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setConnectTimeout(5 * 1000); InputStream inputStream = connection.getInputStream(); byte[] tmp = new byte[1024]; int length; OutputStream outputStream = new FileOutputStream('E:' + File.separator + 'eee.jpg'); while ((length = inputStream.read(tmp)) != -1) {outputStream.write(tmp, 0, length); } outputStream.close(); inputStream.close();} catch (Exception e) { e.printStackTrace();} }}
圖片URL:http://www.iteye.com/upload/l...圖片有3K,但我下載后圖片只有2K而且圖片是錯誤的這是為什么呢?
問題解答
回答1:你把代碼改成這樣試試
public class Client { public static void main(String[] args) {try { URL url = new URL('http://www.iteye.com/upload/logo/user/1177132/a7159cc1-b11a-3122-9a9d-5183d6c6ba99.jpg'); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestProperty('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.19 Safari/537.36'); connection.setConnectTimeout(5 * 1000); InputStream inputStream = connection.getInputStream(); byte[] tmp = new byte[1024]; int length; OutputStream outputStream = new FileOutputStream('E:' + File.separator + 'eee.jpg'); while ((length = inputStream.read(tmp)) != -1) {outputStream.write(tmp, 0, length); } outputStream.close(); inputStream.close();} catch (Exception e) { e.printStackTrace();} }}
不添加UA下載下來的文件其實是這樣的
outputStream.close()之前,先調用outputStream.flush(),這個方法能強制把輸出流緩沖全部寫出來。你前邊的都沒錯,就差一步了。
回答3:這是我用你的代碼讀到的東西。
目標禁止了,為connection添加一個user-agent屬性吧。
相關文章:
1. 在mybatis使用mysql的ON DUPLICATE KEY UPDATE語法實現存在即更新應該使用哪個標簽?2. mysql - 表名稱前綴到底有啥用?3. Navicat for mysql 中以json格式儲存的數據存在大量反斜杠,如何去除?4. mysql - 怎么生成這個sql表?5. mysql儲存json錯誤6. 哭遼 求大佬解答 控制器的join方法怎么轉模型方法7. mysql - 數據庫表中,兩個表互為外鍵參考如何解決8. 編輯成功不顯示彈窗9. 怎么php怎么通過數組顯示sql查詢結果呢,查詢結果有多條,如圖。10. sql語句 - 如何在mysql中批量添加用戶?
