/ Forside / Teknologi / Netværk / TCP/IP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
TCP/IP
#NavnPoint
Per.Frede.. 4668
BjarneD 4017
severino 2804
pallebhan.. 1680
EXTERMINA.. 1525
xou 1455
strarup 1430
Manse9933 1419
o.v.n. 1400
10  Fijala 1204
Hente fil med java over FTP
Fra : Preben Holm


Dato : 28-08-04 21:36

Hej gruppe,

jeg prøver at hente en fil vha. FTP, men filen bliver ikke hentet helt.

Hvad er der galt med nedenstående:

URL url = new URL("ftp://" + FTP_USER + ":" + FTP_PASSWD + "@" +
FTP_PATH);
URLConnection urlConn = url.openConnection();
InputStream is = urlConn.getInputStream();
DataInputStream dis = new DataInputStream(is);

int numBytes = urlConn.getContentLength();
byte[] bytes = new byte[numBytes];
dis.read(bytes, 0, numBytes);

FileOutputStream fos = new
FileOutputStream("/home/preben/tmp/40008.jpg");
fos.write(bytes);


jeg har en mistanke om at det måske har noget at gøre med:
int numBytes = urlConn.getContentLength();

koden er fuldstændig hjemmebrygget og har ikke arbejdet så meget med IO,
så måske der er andet galt?


Mvh / Preben Holm

 
 
Bjarke Andersen (28-08-2004)
Kommentar
Fra : Bjarke Andersen


Dato : 28-08-04 21:38

Preben Holm <64bitNOnoSPAMno@mailme.dk> crashed Echelon writing
news:4130eca7$0$208$14726298@news.sunsite.dk:

> koden er fuldstændig hjemmebrygget og har ikke arbejdet så meget med IO,
> så måske der er andet galt?

Tror der er mere hjælp i en java gruppe, hvis det er spørgsmål til koden du
har.

--
Bjarke Andersen
Wanna reply by email? Remove the spammer in address

Preben Holm (28-08-2004)
Kommentar
Fra : Preben Holm


Dato : 28-08-04 21:39

> jeg prøver at hente en fil vha. FTP, men filen bliver ikke hentet helt.
>
> Hvad er der galt med nedenstående:
>
> URL url = new URL("ftp://" + FTP_USER + ":" + FTP_PASSWD + "@" +
> FTP_PATH);
> URLConnection urlConn = url.openConnection();
> InputStream is = urlConn.getInputStream();
> DataInputStream dis = new DataInputStream(is);
>
> int numBytes = urlConn.getContentLength();
> byte[] bytes = new byte[numBytes];
> dis.read(bytes, 0, numBytes);
>
> FileOutputStream fos = new
> FileOutputStream("/home/preben/tmp/40008.jpg");
> fos.write(bytes);
>
>
> jeg har en mistanke om at det måske har noget at gøre med:
> int numBytes = urlConn.getContentLength();
>
> koden er fuldstændig hjemmebrygget og har ikke arbejdet så meget med IO,
> så måske der er andet galt?

Tillægsspørgsmål:
hvordan undlader jeg at gemme filen (nemt nok i sig selv), men istedet
vise billedet i en eller anden form for grafisk komponent?

Mvh / Preben Holm

Søren Boll Overgaard (29-08-2004)
Kommentar
Fra : Søren Boll Overgaard


Dato : 29-08-04 13:25

Hej,

Den Sat, 28 Aug 2004 22:38:36 +0200, skrev Preben Holm:

> hvordan undlader jeg at gemme filen (nemt nok i sig selv), men istedet
> vise billedet i en eller anden form for grafisk komponent?

Prøv at tage et kig på java.awt.Toolkit.getImage(URL u).
Du kan vise det resulterende billede vha. java.awt.Graphics.drawImage()

FUT: d.e.p.java
--
Søren O.

Preben Holm (29-08-2004)
Kommentar
Fra : Preben Holm


Dato : 29-08-04 01:08

Preben Holm wrote:
> Hej gruppe,
>
> jeg prøver at hente en fil vha. FTP, men filen bliver ikke hentet helt.
>
> Hvad er der galt med nedenstående:
>
> URL url = new URL("ftp://" + FTP_USER + ":" + FTP_PASSWD + "@" +
> FTP_PATH);
> URLConnection urlConn = url.openConnection();
> InputStream is = urlConn.getInputStream();
> DataInputStream dis = new DataInputStream(is);
>
> int numBytes = urlConn.getContentLength();
> byte[] bytes = new byte[numBytes];
> dis.read(bytes, 0, numBytes);
>
> FileOutputStream fos = new
> FileOutputStream("/home/preben/tmp/40008.jpg");
> fos.write(bytes);
>
>
> jeg har en mistanke om at det måske har noget at gøre med:
> int numBytes = urlConn.getContentLength();

og mistanken er rigtig nok... skal hhv. bruge resultatet fra dis.read()
som bliver -1 når filens slutning er nået og dis.available


URL url = new URL("ftp://" + FTP_USER + ":" + FTP_PASSWD + "@"
+ FTP_PATH);
//URLConnection urlConn = url.openConnection();
InputStream is = url.openStream(); //urlConn.getInputStream();
DataInputStream dis = new DataInputStream(is);
FileOutputStream fos = new
FileOutputStream("/home/preben/tmp/40008.jpg");


int transfer = 0;
int numBytes;
while (transfer > -1) {
numBytes = dis.available();
byte[] bytes = new byte[numBytes];
transfer = dis.read(bytes, 0, numBytes);
fos.write(bytes, 0, numBytes);
}

det virker


Nu mangler jeg bare lige en god ide til hvordan jeg får vist billedet!!!


Mvh / Preben Holm

Filip Larsen (29-08-2004)
Kommentar
Fra : Filip Larsen


Dato : 29-08-04 01:21

Preben Holm skrev

> Nu mangler jeg bare lige en god ide til hvordan jeg får vist
billedet!!!

Prøv at tag et kig på javax.swing.ImageIcon der både kan hente GIF og
JPEG fra en URL (inkl. ftp-URL's) og byte data.


Mvh,
--
Filip Larsen



Soren Kuula (29-08-2004)
Kommentar
Fra : Soren Kuula


Dato : 29-08-04 16:01

Hej,

Preben Holm wrote:

> og mistanken er rigtig nok... skal hhv. bruge resultatet fra dis.read()
> som bliver -1 når filens slutning er nået og dis.available
> det virker

Er det ikke bare dig, der manglede en garanti for at det array du sender
til optankning rent faktisk bliver fyldt op ? Det var der ingen der
lovede :)

> Nu mangler jeg bare lige en god ide til hvordan jeg får vist billedet!!!

Ralle, du kan godt lave dynamisk loadende ikoner .. var det ikke noget
med ImageObserver ??? For 100 år siden implementerede jeg ½ web browser
i Java, den kunne tricket. Billeder loadede færdig i en separat tråd.

MVH
Søren


Martin Kofoed (01-09-2004)
Kommentar
Fra : Martin Kofoed


Dato : 01-09-04 06:56


I stedet for at opfinde den dybe tallerken igen, kunne du jo også vælge en
anden strategi: Gå ud fra at det du vil, er så normalt, at nogen har gjort
det før dig ..

Og det ser sørme sådan ud: http://jakarta.apache.org/commons/net

Så kan du bruge en FTPClient som nedenfor (lidt forenklet - se deres
eksempler for uddybning af eksempelvis behandling af svar fra serveren):

FTPClient ftp = new FTPClient();
ftp.connect("ftp.funet.fi");
int serverReply = ftp.getReplyCode();
ftp.login("anonymous","pass@");
ftp.setFileType(FTP.BINARY_FILE_TYPE);
// hent fil:
OutputStream out = new FileOutputStream("filename.ext");
ftp.retreiveFile(remoteFile,out);

Så bliver det vist ikke lettere!


--
Martin Kofoed


Filip Larsen (01-09-2004)
Kommentar
Fra : Filip Larsen


Dato : 01-09-04 11:18

Martin Kofoed skrev

> I stedet for at opfinde den dybe tallerken igen, kunne du jo også
vælge en
> anden strategi: Gå ud fra at det du vil, er så normalt, at nogen har
gjort
> det før dig ..
>
> Og det ser sørme sådan ud: http://jakarta.apache.org/commons/net
> ...
> Så bliver det vist ikke lettere!

Jo, faktisk, for det er allerede bygget ind. En URL som fx.
ftp://navn:password@host.name/path/to/file vil angive en fil der skal
hentes via FTP med brugernavn og password. En sådan URL kan bruges på
samme måde som alle andre URL'er i Java, og fx. kan man, som jeg også
har nævnt tidligere i denne tråd, give en sådan ftp URL direkte til
javax.swing.ImageIcon hvis man vil vise indholdet af en JPG eller GIF
URL. Man kan bygge en billed-viewer i ganske få linier på denne måde.


Mvh,
--
Filip Larsen



Søg
Reklame
Statistik
Spørgsmål : 177553
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste