Maison  >  Questions et réponses  >  le corps du texte

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而且图片是错误的这是为什么呢?

黄舟黄舟2743 Il y a quelques jours914

répondre à tous(3)je répondrai

  • 高洛峰

    高洛峰2017-04-18 10:53:10

    Essayez de changer le code comme suit

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

    Le fichier téléchargé sans ajouter UA est en fait comme ça

    répondre
    0
  • PHPz

    PHPz2017-04-18 10:53:10

    Avant

    outputStream.close(), appelez d'abord outputStream.flush(). Cette méthode peut forcer l'écriture de tous les tampons du flux de sortie. Ce que vous avez dit auparavant est correct, il ne manque qu’une seule étape.

    répondre
    0
  • 黄舟

    黄舟2017-04-18 10:53:10

    Voici ce que j'ai lu en utilisant votre code.

    La cible est désactivée, ajoutez un attribut user-agent à la connexion.

    répondre
    0
  • Annulerrépondre