org.apache.commons.net.ftp.FTPClient上传文件大小改变的解决方法

 

现象:今天在用org.apache.commons.net.ftp.FTPClient的storeFile方法时,发现上传小文件如几KB的情况下,文件是无损传输,但是当上传的文件是55M以及100多兆的时候,FTP上的服务器文件的大小就会增加。

解决方法:在连接FTP服务器的时候,加上一段这个代码ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);

 

示例:

连接FTP服务器代码:

public static FTPClient getFtpClient(String serverIP,String userName,String password,int port) throws SocketException, IOException{

         int reply;

             FTPClient ftpClient = new FTPClient();

             ftpClient.connect(serverIP, port);

             reply = ftpClient.getReplyCode();

            

            if(!FTPReply.isPositiveCompletion(reply)){

                ftpClient.disconnect();

                System.out.println("登陆FTP失败");

                return null;

            }

            ftpClient.login(userName, password);

            ftpClient.setDataTimeout(2000);

            ftpClient.enterLocalPassiveMode();

            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); return ftpClient;

    }

上传文件方法的代码:

/**

     * 上传文件到文件服务器中

     * @param file  需上传的文件

     * @param ftpClient  

     * @param workDirectory   FTP服务器的相对目录

     * @return

     * @throws IOException

     */

    public static String uploadFileToBBK(File file,FTPClient ftpClient,String workDirectory) throws IOException{

        

        ftpClient.setControlEncoding("UTF-8");

        ftpClient.makeDirectory(workDirectory);

        ftpClient.changeWorkingDirectory(workDirectory);

        BufferedInputStream  fiStream =new BufferedInputStream(new FileInputStream(file));

        boolean  flag = ftpClient.storeFile(new String((file.getName()).getBytes("UTF-8"),"iso-8859-1"),fiStream);

        fiStream.close();

        if(flag){

            return "OK";

        }else{

            return "";

        }

    }

断开服务器连接方法的代码:

public static void closeFtp(FTPClient ftpClient){

        if(ftpClient!=null && ftpClient.isConnected()){

            try {

                boolean isLogOut = ftpClient.logout();

                if(isLogOut){

                    System.out.println("成功关闭ftp连接");

                }

            } catch (IOException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

                System.out.println("关闭FTP服务器异常");

            }finally{

                try {

                    ftpClient.disconnect();

                } catch (IOException e) {

                    // TODO Auto-generated catch block

                    e.printStackTrace();

                    System.out.println("关闭服务器连接异常");

                }

            }

            

        }

    }

 

你可能感兴趣的:(FTPClient)