Comment télécharger l'image à partir de l'URL en java?


J'ai essayé de télécharger une image à partir de l'URL via java.
J'ai essayé de le résoudre de plusieurs façons mais je n'ai pas réussi.

J'écris mes manières en espérant que quelqu'un trouvera où ça s'est mal passé:

Avec les première et deuxième façons, j'obtiens l'erreur suivante pendant que j'essaie d'ouvrir l'image:

... le fichier semble endommagé, corrompu ou trop volumineux

...et sa taille est plus petite qu'elle ne devrait l'être.

Je suppose que c'est lié à encodage.

Première façon:

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

Deuxième voie:

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

Avec la façon 3, j'obtiens une exception dans thread "main" java.lang.IllegalArgumentException: image == null!

Troisième voie:

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

J'ai vraiment besoin de votre aide!!! J'essaie de résoudre depuis longtemps, sans succès.

Merci d'avance!!!

Author: azurefrog, 2016-09-22

2 answers

Vous devez spécifier l'emplacement complet du fichier de destination de la manière 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);

Cela fonctionne bien pour moi

 5
Author: Vadivelan, 2016-09-22 14:35:07

J'ai essayé la première solution et cela fonctionne bien, une fois que j'ai défini les paramètres proxy corrects en tant qu'arguments de machine virtuelle. Il est possible que cela explique également votre problème. Pour utiliser le proxy correct, fournissez les arguments de machine virtuelle suivants à partir de votreE ou de votre ligne de commande (quelle que soit la façon dont vous exécutez votre application) pour définir le nom d'hôte et le port du proxy corrects:

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

Pour déterminer vos paramètres proxy actuels, ouvrez Chrome et accédez à l'URL suivante:

chrome://net-internals/#proxy
 -1
Author: Daniël Rutten, 2016-09-22 14:56:34