package com.qimai.log;

import android.util.Log;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

import java.io.IOException;
import java.io.InputStream;
import java.net.SocketException;

public class FtpUtil {


    private static final String TAG = "FtpUtil";




        /**
         * Description: 向FTP服务器上传文件
         *
         * @param host FTP服务器hostname
         * @param port FTP服务器端口
         * @param username FTP登录账号
         * @param password FTP登录密码
         * @param basePath FTP服务器基础目录
         * @param filePath FTP服务器文件存放路径。例如分日期存放：/2017/08/06。文件的路径为basePath+filePath
         * @param filename 上传到FTP服务器上的文件名
         * @param input 输入流
         * @return 成功返回true，否则返回false
         */
        public static boolean uploadFile(String host, int port, String username, String password, String basePath,
            String filePath, String filename, InputStream input)
        {

            Log.d(TAG, "uploadFile: thread= "+Thread.currentThread().getName());
            boolean result = false;
            FTPClient ftp = new FTPClient();
            try
            {
                int reply;
                ftp.connect(host, port);// 连接FTP服务器
                // 如果采用默认端口，可以使用ftp.connect(host)的方式直接连接FTP服务器
                ftp.login(username, password);// 登录
                reply = ftp.getReplyCode();
                if (!FTPReply.isPositiveCompletion(reply))
                {
                    ftp.disconnect();
                    return result;
                }
                // 切换到上传目录
               String  onepath=new String((basePath + filePath).getBytes("GBK"),"iso-8859-1");
                if (!ftp.changeWorkingDirectory(onepath))
                {
                    ftp.makeDirectory(onepath);
                    ftp.changeWorkingDirectory(onepath);
                  /*  Log.d(TAG, "uploadFile: 切换到上传目录");
                    // 如果目录不存在创建目录
                    String[] dirs = filePath.split("/");
                    String tempPath = basePath;*/

                    /*for (String dir : dirs)
                    {
                        if (null == dir || "".equals(dir))
                            continue;
                        tempPath += "/" + dir;
                        if (!ftp.changeWorkingDirectory(tempPath))
                        {
                            if (!ftp.makeDirectory(tempPath))
                            {
                                return result;
                            }
                            else
                            {
                                ftp.changeWorkingDirectory(tempPath);
                            }
                        }
                    }*/
                }
                // 设置上传文件的类型为二进制类型
                ftp.setFileType(FTP.BINARY_FILE_TYPE);
                // 上传文件
                ftp.enterLocalPassiveMode();
                if (!ftp.storeFile(new String(filename.getBytes("GBK"),"iso-8859-1"), input)) {

                    Log.d(TAG, "uploadFile: upload fail");
                    return result;
                }
                Log.d(TAG, "uploadFile: 上传成功");
                input.close();
                ftp.logout();
                result = true;
            }
            catch (IOException e)
            {
                e.printStackTrace();
                Log.d(TAG, "uploadFile: e= "+e.getMessage());
            }
            finally
            {
                if (ftp.isConnected())
                {
                    try
                    {
                        ftp.disconnect();
                    }
                    catch (IOException ioe)
                    {
                    }
                }
            }
            return result;
        }



        /**
         * Description: 向FTP服务器上传文件
         *
         * @param host     FTP服务器hostname
         * @param port     FTP服务器端口
         * @param username FTP登录账号
         * @param password FTP登录密码
         * @param basePath FTP服务器基础目录
         * @param filePath FTP服务器文件存放路径。例如分日期存放：/2015/01/01。文件的路径为basePath+filePath
         * @param filename 上传到FTP服务器上的文件名
         * @param input    输入流
         * @return 成功返回true，否则返回false
         */
    public static boolean uploadFile1(String host, int port, String username, String password, String basePath,
                                     String filePath, String filename, InputStream input) {
        boolean result = false;
        FTPClient ftp = new FTPClient();
        try {
            int reply;
            ftp.connect(host, port);// 连接FTP服务器
            // 如果采用默认端口，可以使用ftp.connect(host)的方式直接连接FTP服务器
            ftp.login(username, password);// 登录
            ftp.setBufferSize(1024);
            ftp.setControlEncoding("UTF-8");
            ftp.enterLocalPassiveMode();
            reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return result;
            }
            //切换到上传目录
            if (!ftp.changeWorkingDirectory(basePath + filePath)) {
                //如果目录不存在创建目录
                //String[] dirs = filePath.split("/");
                String tempPath = basePath;
             /*   for (String dir : dirs) {
                    if (null == dir || "".equals(dir)) continue;
                    tempPath += "/" + dir;
                    if (!ftp.changeWorkingDirectory(tempPath)) {
                        if (!ftp.makeDirectory(tempPath)) {
                            return result;
                        } else {
                            ftp.changeWorkingDirectory(tempPath);
                        }
                    }
                }*/
                ftp.changeWorkingDirectory(tempPath);
            }


            //创建目录

            if (!ftp.changeWorkingDirectory(filePath)){

                ftp.makeDirectory(filePath);
            }
            //设置上传文件的类型为二进制类型
            ftp.setFileType(FTP.BINARY_FILE_TYPE);
            //上传文件
            if (!ftp.storeFile(filePath+"/"+filename, input)) {
                return result;
            }
            input.close();
            ftp.logout();
            result = true;
        } catch (IOException e) {
            Log.d(TAG, "uploadFile: e= "+e.getMessage());
            e.printStackTrace();
          e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
        return result;
    }



}
