簡體   English   中英

如何將文件上傳到ftp服務器?

[英]How can i upload a file into a ftp server?

解決了

我正在進行必須與ftp服務器聯系的桌面應用程序,將要上傳的文件是圖像。 我正在嘗試,但是盡管已連接但無法上傳,問題是當我想上傳文件時,該方法不起作用並返回false。 代碼如下:

public boolean subeFTP(String archivoLocal, String archivoServer){
    boolean resultado=false;

    FTPClient ClienteFTP=new FTPClient();

    //Se toma el nombre del archivo local
    String aux = archivoLocal;
    aux = aux.substring(aux.lastIndexOf("\\")+1);

    try {
        //Establece el timeout del servidor en 5 minutos para evitar desconexiones
        ClienteFTP.setControlKeepAliveTimeout(300);

        //Conexión al servidor
        ClienteFTP.connect(prop_servidor, prop_puertoServidor);

        //Pone el ftp en modo pasivo para recibir un archivo, permanecerá así mientras no se cambie
        ClienteFTP.enterLocalPassiveMode(); 

        //Login
        resultado=ClienteFTP.login(prop_usuarioFtp, prop_passFtp);


        //Comprobación de la conexión
        int reply = ClienteFTP.getReplyCode(); 
        if (!FTPReply.isPositiveCompletion(reply)) {
            ClienteFTP.logout();
            ClienteFTP.disconnect();
               throw new Exception("El servidor FTP ha rechazado la conexión, error:\n" + ClienteFTP.getReplyString()); 
        }


        //Se cambia el directorio al requerido
        resultado = resultado && ClienteFTP.changeWorkingDirectory(prop_directorioServidor);


        //Tipo de archivo y envío
        resultado = resultado && ClienteFTP.setFileType(FTP.BINARY_FILE_TYPE);
        //resultado = resultado && ClienteFTP.setFileTransferMode(FTP.BLOCK_TRANSFER_MODE);


        BufferedInputStream buffIn=new BufferedInputStream(new FileInputStream(archivoLocal));
        resultado = resultado && ClienteFTP.storeFile(archivoServer+aux, buffIn);
        System.out.println(ClienteFTP.getReplyString());

        buffIn.close();
        ClienteFTP.logout();
        ClienteFTP.disconnect();

        resultado=true;

    } catch (SocketException e) {
        System.out.println("Fallo 1");
        e.printStackTrace();
        resultado=false;

    } catch (IOException e) {
        System.out.println("Fallo 2");
        resultado=false;
        e.printStackTrace();
    } catch (Exception e) {
        resultado=false;
        e.printStackTrace();
    }

    return resultado ;
}

您應該進入本地被動模式。 使用以下方法ftp.enterLocalPassiveMode()

根據文件

將當前數據連接模式設置為PASSIVE_LOCAL_DATA_CONNECTION_MODE。 僅在客戶端和服務器之間的數據傳輸時使用此方法。 此方法導致在打開每個數據連接之前向服務器發出PASV(或EPSV)命令,告訴服務器打開客戶端將連接到的數據端口以進行數據傳輸。 FTPClient將保持在PASSIVE_LOCAL_DATA_CONNECTION_MODE,直到通過調用某些其他方法(例如enterLocalActiveMode())更改模式為止。

我也建議您調用ftpClient.setControlKeepAliveTimeout(timeoutInMilliseconds);

Set the time to wait between sending control connection keepalive messages when processing file upload or download.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM