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下载下来的文件其实是这样的
回答2:outputStream.close()之前,先调用outputStream.flush(),这个方法能强制把输出流缓冲全部写出来。你前边的都没错,就差一步了。
回答3:这是我用你的代码读到的东西。
目标禁止了,为connection添加一个user-agent属性吧。
相关文章:
1. node.js - vue-cli构建报错。。。生成不了模板,求解~!!2. css3动画 - 实现css3推倒动画3. javascript - 微信小程序 wx.downloadFile下载文件大小有限制吗4. html5 - HTML代码中的文字乱码是怎么回事?5. css - 前端flex布局嵌套内层的布局不起作用?6. javascript - 如何通过参数获取Object的子节点?7. python3.5 urllib.parse.unquote 乱码8. html按键开关如何提交我想需要的值到数据库9. android - 求 360浏览器 百度浏览器 搜狗浏览器的最新启动类名10. css - ul ol前边的标记如何调整样式呢