Java:使用URL下载图片为何图片下载不完全呢?
黄舟
黄舟 2017-04-18 10:51:10
0
3
967
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而且图片是错误的这是为什么呢?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

reply all(3)
小葫芦

Try changing the code to this

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();
        }
    }
}

The file downloaded without adding UA is actually like this

PHPzhong

outputStream.close()之前,先调用outputStream.flush(), this method can force all output stream buffers to be written out. What you said before is correct, there is only one step missing.

黄舟

This is what I read using your code.

The target is disabled, add a user-agent attribute to the connection.

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template