Avatar billede mcardle Nybegynder
31. juli 2009 - 09:27 Der er 11 kommentarer og
1 løsning

Hent billede fra ektern url via cUrl eller noget andet

Hej Eksperter.

Jeg har fundet et script der kan tage en ekstern fil og gemme den via cUrl. Problemet er lidt at jeg skal skrive stien til det billede jeg gerne vil hente, men det bliver genereret via en aspx-side, med et id. Det resultere så i, at den prøver at gemme den aspx-side som generere billede og ikke selve billedet.

Jeg bruger følgende klasse (i bunden af siden):
http://wiki.dreamhost.com/CURL#Getting_binary_data

Håber I kan hjælpe.
// mcardle
Avatar billede erikjacobsen Ekspert
31. juli 2009 - 09:56 #1
Ikke helt forstået ... er det fordi du gemmer filen med det samme navn som i url-en?
Avatar billede mcardle Nybegynder
31. juli 2009 - 10:03 #2
Ja, det gør jeg vel. Det behøver jeg ikke, men det gør klasse automatisk. Hvis du ser linket så kan du se klassen. Ved ikke om du har kigget på den?

Når jeg indsætter denne kode:

$d = new downloader('/data/sites/mcs/');
$d->get("http://webservice.oxygenekatalog.dk/getpic.aspx?ImgSize=3&ImgID=15851");
$d->save("galleri/");

Så gemmer den ikke billedet, men en fil.

// mcardle
Avatar billede erikjacobsen Ekspert
31. juli 2009 - 10:44 #3
Den gemmer vel billedet, men giver det er forkert navn ?  Er det problemet ?

Du skal så "bare" finde på et andet navn, og en passende extension afhængig af billedtype.
Avatar billede mcardle Nybegynder
31. juli 2009 - 10:59 #4
Nej, mit problem er, at den tager getpic.aspx og gemmer i stedet for billedet. Så jeg skal gerne finde en anden måde at gøre det på.

Kender du en måde at tage billedet på, man kan vidst gøre det med en fopen og så gemme det som et billede på serveren, så jeg kan arbejde med det.

Den klasse jeg har her virker kun, hvis jeg har en url med et fysisk billede:

Eks.:
http://domain.dk/billeder/mit_billede.jpg

og ikke

http://webservice.oxygenekatalog.dk/getpic.aspx?ImgSize=3&ImgID=15851

// mcardle
Avatar billede repox Seniormester
31. juli 2009 - 12:18 #5
Jeg tror du misforstår hvad erikjacobsen forsøger at fortælle dig.

erikjacobsen har ret i at du gemmer filen med et forkert navn; problematikken ligger i at cURL ser billedet som om det har filnavnet getpic.aspx.

Du skal selv oprette et navn for filen; i den sammenhæng er din klasse ubrugelig.

Jeg har lavet den lidt om: http://php.pastebin.com/m14c7ee6f

Du bruger den så næsten på samme måde, men en enkelt undtagelse - der er kommet en metode mere: downlader::setFilename()
Du bruger den således:

$d = new downloader(); //Ingen data med mere
$d->setFilename("mit_billede.png"); //Sætter filnavnet manuelt, ellers navngives der ud fra URL'en (som i dette tilfælde blicer getpic.aspx)
$d->get("http://webservice.oxygenekatalog.dk/getpic.aspx?ImgSize=3&ImgID=15851");
$d->save("galleri/");

Avatar billede mcardle Nybegynder
31. juli 2009 - 12:34 #6
Kanon... Det virker jo perfekt, tak for simplificeringen.

Et lille tillægsspørgsmål, hvis det er okay.

Hvordan finder jeg fil-endelsen på det billede jeg får fra url'en, så jeg ikke skal sætte en fast endelse.

// mcardle
Avatar billede repox Seniormester
31. juli 2009 - 12:40 #7
Det kan du ikke i det pågældende tilfælde, fordi filendelsen er .aspx - det kan du ikke bruge til noget, hvis det er et billede du forsøger at hente.

Men ellers er det http://php.net/parse_url du skal kigge på.
Avatar billede mcardle Nybegynder
31. juli 2009 - 12:43 #8
Har man ikke mulighed for at se på en header eller noget, hvad for data cUrl returnere?

// mcardle
Avatar billede repox Seniormester
31. juli 2009 - 12:47 #9
Jo, da? Men hvad hvis serveren ikke kender mimetypen og returnerer application/octet-stream? Altså, men andre ord, du kan ikke stole på mimetypes.
Avatar billede mcardle Nybegynder
31. juli 2009 - 13:13 #10
Mon ikke det duer hvis det kun er billeder. Det er kun png, jpg og gif.

Under alle omstændigheder skal du jo have nogle points - smid et svar.

// mcardle
Avatar billede repox Seniormester
31. juli 2009 - 13:20 #11
Jamen, værsgo'.
Avatar billede mcardle Nybegynder
31. juli 2009 - 13:25 #12
Mange tak for hjælpen.

//mcardle
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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