06. september 2004 - 16:00
Der er
24 kommentarer og 1 løsning
Ftp commons står og hænger?
Når jeg forsøger at uploade via commons ftp så står app. og hænger. Har nogen et bud på hva der kan være galt? test.zip filen bliver oprettet på serveren, men er bare tom. client.connect(host); boolean status = client.login(user, password); log.debug("Status "+status); InputStream is = new FileInputStream(zippedFilePath); client.setFileType(FTPClient.BINARY_FILE_TYPE); OutputStream os = client.storeFileStream("test.zip"); byte[] b = new byte[1000]; int n; int total = 0; while((n = is.read(b)) == 0) { os.write(b,0,n); total += n; log.debug("bytes uploadet: " + total); } os.close(); is.close(); client.disconnect(); log.debug("Ftp ended"); } catch (Exception e) { log.warn("Exception "+e); }
Annonceindlæg tema
Forsvar & beredskab
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
06. september 2004 - 16:02
#1
Skal while((n = is.read(b)) == 0) { ikke være while((n = is.read(b)) >= 0) { ?
06. september 2004 - 16:07
#2
stadigvæk samme resultat....?
06. september 2004 - 16:10
#3
Mystisk fordi jeg har set helt tilsvarende kode virke.
06. september 2004 - 16:12
#4
Kan det være noget med min ftp server
06. september 2004 - 16:16
#5
Tja. Den hypotese er lige så god som enhver anden.
06. september 2004 - 16:17
#6
hmm jeg har lige testet via en klient og jeg kan sagtens logge på og uploade til min ftp server så det må være koden?
06. september 2004 - 16:17
#7
Er der skrive adgang til det directory når man FTP'er ind ?
06. september 2004 - 16:34
#8
Ja jeg har alle rettigheder...
06. september 2004 - 16:37
#9
Jeg kan se at den når til denne linie: OutputStream os = client.storeFileStream("test.zip"); Hvorefter den ikke kommer videre og bare hænger..
06. september 2004 - 18:18
#10
Virker det hvis du laver en manuel upload (windows/linux command line ftp client) ?
06. september 2004 - 18:23
#11
Kunne du evt. prøve med storeFile i stedetfor storeFileStream ?
06. september 2004 - 18:25
#12
09. september 2004 - 20:08
#13
Kommet videre ?
13. september 2004 - 15:19
#14
Jeg er kommet lidt videre men nu mangler sidste stykke af filen når jeg uploader har du nogen forslag til hvad det kan være? Jeg forsøger således: public static void putFile2(String host,String user,String password, String filename, byte[] data) throws Exception { FTPClient client = new FTPClient(); log.debug("****Ftp upload started****"); client.connect(host); client.login(user, password); log.debug(client.getReplyString()); client.enterLocalPassiveMode(); client.setFileType(FTPClient.BINARY_FILE_TYPE); OutputStream os = client.storeFileStream(filename); os.write(data); os.flush(); os.close(); client.disconnect(); log.debug("***Ftp upload ended****"); } Vi snakker om 20-30 kb der mangler i hver fil....
13. september 2004 - 19:40
#15
Jeg synes stadig at du skal forsøge med storeFile i.s.f. storeFileStream
13. september 2004 - 19:44
#16
Jeg gjorde det også arne og det virkede. Jeg tror der er en bug i storeFileStream der gør at den af et eller anden grund klipper sidste del af filen væk. Bare læg et svar..
13. september 2004 - 19:46
#17
Det ligner en god gammeldags bug, når I nu er 2 som har haft problemet.
13. september 2004 - 19:46
#18
svar
14. september 2004 - 14:30
#19
arne hvis jeg nu ville hente alle filer ned fra en ftp server burde det her så ikke virke? public static java.util.List getFiles(String host,String user,String password) throws Exception { log.debug("****Ftp download started****"); java.util.List liste = new LinkedList(); FTPClient client = new FTPClient(); client.connect(host); client.login(user, password); log.debug(client.getReplyString()); client.enterLocalPassiveMode(); client.setFileType(FTPClient.BINARY_FILE_TYPE); FTPFile[] files = client.listFiles("mappe"); InputStream is=null; for(int i=0;i<files.length;i++){ FTPFile file = files[i]; if(file.getType() == file.FILE_TYPE){ String fileName = file.getName(); is = client.retrieveFileStream("mappe/"+fileName); log.debug("Name "+fileName); log.debug("File size "+is.available()); liste.add(new MyFile(fileName,is)); is.close(); } } client.disconnect(); log.debug("***Ftp download ended****"); return liste; } Jeg får en nullpointer exception på is.available() anden gang jeg kalder den, første gang virker det udmærket?
14. september 2004 - 14:31
#20
udskrift: ****Ftp download started**** 230 User logged in, proceed. Name figur1.vsd File size 2920 Name figur2.vsd java.lang.NullPointerException
14. september 2004 - 14:39
#21
Hvad sker der i MyFile constructor ?
14. september 2004 - 14:46
#22
Ikke andet end at filen bliver lagt i en liste: import java.io.*; /** * * @author Administrator */ public class MyFile { /** Creates a new instance of File */ public MyFile(String name, InputStream inputStr) { this.name=name; this.inputStr=inputStr; } public String getName(){ return name; } public InputStream getInputStr(){ return inputStr; } private String name; private InputStream inputStr; }
14. september 2004 - 14:54
#23
Jeg kan ikke forklare null pointer exception, men hvorfor gemmer du en input stream i objektet du gemmer i listen når du lukker input stream lige bagefter ?
14. september 2004 - 14:54
#24
Med hensyn til fejlen kan du så ikke få en hel stacktrace ?
14. september 2004 - 16:33
#25
Jeg fik det til at virke således arne.. tak for hjælpen public static void getFiles(String host,String user,String password) throws Exception { log.debug("****Ftp download started****"); FTPClient client = new FTPClient(); client.connect(host); client.login(user, password); log.debug(client.getReplyString()); client.enterLocalPassiveMode(); client.setFileType(FTPClient.BINARY_FILE_TYPE); FTPFile[] files = client.listFiles("mappe"); InputStream is=null; for(int i=0;i<files.length;i++){ FTPFile file = files[i]; if(file.getType() == file.FILE_TYPE){ String fileName = file.getName(); is = client.retrieveFileStream("mappe/"+fileName); byte[] b = new byte[(int)file.getSize()]; for(int j = 0;j<file.getSize();j++){ b[j] = (byte)is.read(); } log.debug("bytes: " + b.length); is.close(); log.debug("Name "+fileName); log.debug("File size "+file.getSize()); InputStream out = new ByteArrayInputStream(b); if(client.completePendingCommand()){ FtpHandler.putFile(FTP_HOST,FTP_USER,FTP_PASSWORD,fileName,out); client.deleteFile("mappe/"+fileName); } } } client.disconnect(); log.debug("***Ftp download ended****"); }
Kurser inden for grundlæggende programmering