Avatar billede aslan Nybegynder
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);
    }
Avatar billede arne_v Ekspert
06. september 2004 - 16:02 #1
Skal

while((n = is.read(b)) == 0) {

ikke være

while((n = is.read(b)) >= 0) {

?
Avatar billede aslan Nybegynder
06. september 2004 - 16:07 #2
stadigvæk samme resultat....?
Avatar billede arne_v Ekspert
06. september 2004 - 16:10 #3
Mystisk fordi jeg har set helt tilsvarende kode virke.
Avatar billede aslan Nybegynder
06. september 2004 - 16:12 #4
Kan det være noget med min ftp server
Avatar billede arne_v Ekspert
06. september 2004 - 16:16 #5
Tja. Den hypotese er lige så god som enhver anden.
Avatar billede aslan Nybegynder
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?
Avatar billede arne_v Ekspert
06. september 2004 - 16:17 #7
Er der skrive adgang til det directory når man FTP'er ind ?
Avatar billede aslan Nybegynder
06. september 2004 - 16:34 #8
Ja jeg har alle rettigheder...
Avatar billede aslan Nybegynder
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..
Avatar billede arne_v Ekspert
06. september 2004 - 18:18 #10
Virker det hvis du laver en manuel upload (windows/linux command line ftp client) ?
Avatar billede arne_v Ekspert
06. september 2004 - 18:23 #11
Kunne du evt. prøve med storeFile i stedetfor storeFileStream ?
Avatar billede arne_v Ekspert
06. september 2004 - 18:25 #12
Det sidste jævnfør:
  http://eksperten.dk/spm/525150
Avatar billede arne_v Ekspert
09. september 2004 - 20:08 #13
Kommet videre ?
Avatar billede aslan Nybegynder
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....
Avatar billede arne_v Ekspert
13. september 2004 - 19:40 #15
Jeg synes stadig at du skal forsøge med storeFile i.s.f. storeFileStream
Avatar billede aslan Nybegynder
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..
Avatar billede arne_v Ekspert
13. september 2004 - 19:46 #17
Det ligner en god gammeldags bug, når I nu er 2 som har haft problemet.
Avatar billede arne_v Ekspert
13. september 2004 - 19:46 #18
svar
Avatar billede aslan Nybegynder
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?
Avatar billede aslan Nybegynder
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
Avatar billede arne_v Ekspert
14. september 2004 - 14:39 #21
Hvad sker der i MyFile constructor ?
Avatar billede aslan Nybegynder
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;
 
}
Avatar billede arne_v Ekspert
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 ?
Avatar billede arne_v Ekspert
14. september 2004 - 14:54 #24
Med hensyn til fejlen kan du så ikke få en hel stacktrace ?
Avatar billede aslan Nybegynder
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****");
  }
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