Avatar billede naesbygaard Nybegynder
31. maj 2004 - 17:30 Der er 12 kommentarer og
1 løsning

hente billede fra webserver

jeg skal hente et billede fra en webserver, jeg synes tidligere jeg er stødt på et lille program herinde men nu kan jeg ikke finde det.

Jeg ved ikke helt hvordan jeg skal lave det, desuden skal det nok køre gennem en proxy - er det besværligt?

1. program til at dl billede/fil fra webserver (http)
2. proxyconnection?
3. plus det løse :)

På forhånd tak

/NbG
Avatar billede arne_v Ekspert
31. maj 2004 - 17:50 #1
re 1)

import java.net.*;
import java.io.*;

public class HttpGet {
  public static void main(String[] args) {
      try {
        URL url = new URL("http://www.xxx.dk/z.jpg");
        HttpURLConnection con = (HttpURLConnection)url.openConnection();
        con.connect();
        if(con.getResponseCode() == HttpURLConnection.HTTP_OK) {
            InputStream is = con.getInputStream();
            OutputStream os = new FileOutputStream("z.jpg");
            byte[] b = new byte[1000];
            int n;
            while((n = is.read(b)) >= 0) {
              os.write(b,0,n);
            }
            os.close();
            is.close();
        }
        con.disconnect();
      } catch (MalformedURLException e) {
        e.printStackTrace();
      } catch (FileNotFoundException e) {
        e.printStackTrace();
      } catch (IOException e) {
        e.printStackTrace();
      }
  }
}
Avatar billede arne_v Ekspert
31. maj 2004 - 17:54 #2
re 2)

System.setProperty("http.proxyHost", "proxy.xxx.dk");
System.setProperty("http.proxyPort", "8000");
Avatar billede naesbygaard Nybegynder
31. maj 2004 - 18:52 #3
Hej arne v !

Ja det virker sku, godt gået!
Proxy-tingen kom til at se sådan ud:

Properties systemSettings = System.getProperties();
systemSettings.put("proxySet", "true");
systemSettings.put("proxyHost", "proxy");
systemSettings.put("proxyPort", "5555");
System.setProperties(systemSettings);

// dette skal bare ordnes inden der connectes ( con.connect(); )
String password = "user:pass";
String encPasswd = new sun.misc.BASE64Encoder().encode(password.getBytes());
con.setRequestProperty("Proxy-Authorization", "Basic " + encPasswd);

/NbG
Avatar billede arne_v Ekspert
31. maj 2004 - 18:59 #4
Det der er de gamle properties for proxy.

De nye er dem jeg angav. De er dokumenteret her: http://java.sun.com/j2se/1.4.2/docs/guide/net/properties.html
Avatar billede arne_v Ekspert
31. maj 2004 - 18:59 #5
OK at jeg ligger et svar
Avatar billede naesbygaard Nybegynder
31. maj 2004 - 19:02 #6
nå ok, jeg kunne godt se at man snakkede om gamle og nye. Det må jeg lige afprøve...
Men det virker som sagt, og mange tak for hjælpen.

/NbG
Avatar billede arne_v Ekspert
31. maj 2004 - 19:18 #7
Jeg tror kun at de nye er lavet for at man kan angive forskellige proxy
servere for HTTP og FTP samt for at man kan hvilke hosts der ikke skal
brueg proxy (http.nonProxyHosts).
Avatar billede arne_v Ekspert
16. juni 2004 - 22:25 #8
Tid at få afsluttet spørgsmålet ?
Avatar billede arne_v Ekspert
09. august 2004 - 00:03 #9
??
Avatar billede arne_v Ekspert
22. august 2004 - 23:23 #10
?
Avatar billede naesbygaard Nybegynder
05. oktober 2004 - 15:59 #11
hej arne (og alle andre)

Når jeg forsøger at hente et billede som ikke eksisterer sker følgende:

- nogle gange fanger min fejlhandler den (con.getResponseCode() == HttpURLConnection.HTTP_OK)

- men andre gange så fortsætter den og så henter den bare en fil på et tilfældigt antal kb. (dog altid det samme for den samme server).

Hvordan ville du løse dette? Ville gerne fange det inden jeg laver billedet. men har ellers tænkt at hashe alle billederne ind i et array og så hele tiden sammenligne dem... men det lyder som en lidt syg løsning.

Jeg har accepteret dit svar :)

/NbG
Avatar billede arne_v Ekspert
05. oktober 2004 - 16:04 #12
Der er ikke meget du kan gøre.

Serveren opfører sig ikke som serveren bør gøre.

Prøv evt. at kigge lidt på den fil der hentes. Mit gæt er at det
er en text fil med "Den URL du forsøgte at hente findes ikke, prøv
evt. ...".

Du kunne eventuelt prøve at teste på om content type er billede.
Avatar billede arne_v Ekspert
05. oktober 2004 - 16:05 #13
Noget a la:

if(con.getContentType().indexOf("image") >= 0) {
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester