2010-08-23 3 views
0

J'écris un téléchargeur de fichier image pour android pour mon logiciel de galerie d'images préféré et il utilise FTP. J'ai commencé à utiliser Apache-Commons Net FTP comme ma bibliothèque ftp basée sur past stack overflow questions. Comme si:Pourquoi mon InputStream ne fonctionne pas sous Android?

FTPClient ftp = new FTPClient(); 
try{ 
    ftp.connect(host); 
    Log.i(TAG,"we connected"); 
    if(!ftp.login(user,pass)){ 
    ftp.logout(); 
    //TODO: alert user it didn't happen 
    return; 
    }  
    String replyStatus = ftp.getStatus(); 
    Log.i(TAG,replyStatus); 
    int replyCode = ftp.getReplyCode(); 
    if (!FTPReply.isPositiveCompletion(replyCode)) 
    {  
    ftp.disconnect(); 
    //TODO: alert user it didn't happen 
    return; 
    }  
    Log.i(TAG,"we logged in"); 
    ftp.changeWorkingDirectory(path); 
    ftp.setFileType(ftp.BINARY_FILE_TYPE); 
    for(int i = 0; i < contentUris.size(); i++){ 
    Log.i(TAG,"uploading new file"); 
    Uri stream = (Uri) contentUris.get(i); 
    //InputStream in = openFileInput(getRealPathFromURI(stream)); 
    InputStream in =this.getContentResolver().openInputStream(stream); 
    BufferedInputStream buffIn=null; 
    buffIn=new BufferedInputStream(in); 

    ftp.setFileType(ftp.BINARY_FILE_TYPE); 
    boolean Store = ftp.storeFile("test.jpg", buffIn); 
    Log.i(TAG, "uploaded test"); 
    }  
    ftp.disconnect(); 
}  
catch(Exception ex){ 
    //do something wise and smart and useful 
} 

Je vois dans le journal que je suis en train ouvert une session, je suis en mesure de changer de répertoire, et quand je télécharge je reçois un test.jpg dans mon répertoire, mais avec 0 octets taille .

Ce qui donne? Est-ce que je n'ouvre pas le flux d'entrée à droite? Comment puis-je le faire correctement?

Si je ne donne pas suffisamment de détails, laissez-moi savoir - le full code is also available on github

Répondre

1

On dirait que le problème est que vous ne pouvez pas établir une connexion ftp actif, vous devez utiliser le mode passif. Alors changez le top en: ftpClient.enterLocalPassiveMode();

FTPClient ftp = new FTPClient(); 
try{ 
    ftp.connect(host); 
    ftp.enterLocalPassiveMode(); 
    Log.i(TAG,"we connected"); 
    if(!ftp.login(user,pass)){ 
    ftp.logout(); 
    //TODO: alert user it didn't happen 
    return; 
    } 
    String replyStatus = ftp.getStatus(); 
    Log.i(TAG,replyStatus); 
    int replyCode = ftp.getReplyCode(); 
    if (!FTPReply.isPositiveCompletion(replyCode)) 
    { 
    ftp.disconnect(); 
    //TODO: alert user it didn't happen 
    return; 
    } 

    Log.i(TAG,"we logged in"); 
    ftp.changeWorkingDirectory(path); 
    ftp.setFileType(ftp.BINARY_FILE_TYPE); 
    for(int i = 0; i < contentUris.size(); i++){ 
    Log.i(TAG,"uploading new file"); 
    Uri stream = (Uri) contentUris.get(i); 
    String filePath = getRealPathFromURI(stream); 
    InputStream in = new FileInputStream(filePath); 
    ftp.setFileType(ftp.BINARY_FILE_TYPE); 

    boolean Store = ftp.storeFile("test.jpg", in); 
    Log.i(TAG, "uploaded test"); 
    } 


    ftp.disconnect(); 
} 
catch(Exception ex){ 
    //TODO: properly handle exception 
    //Log.i(TAG,ex); 
    //TODO:Alert the user this failed 
} 
Questions connexes