투케이2K

856. (Android/Java) [jsch] SFTP 라이브러리 - 원격 서버에 파일 업로드 수행 실시 - uploadFile 본문

Android

856. (Android/Java) [jsch] SFTP 라이브러리 - 원격 서버에 파일 업로드 수행 실시 - uploadFile

투케이2K 2024. 9. 1. 09:41

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Java / Kotlin

 

[소스 코드]

 

    // ------------------------------------------------------------------------------------------
    // TODO [SFTP 파일 전송 수행 (클라이언트 (앱) >> 서버)]
    // ------------------------------------------------------------------------------------------
    // TODO Param : serverDir : /
    // ------------------------------------------------------------------------------------------
    // TODO Param : clientFilePath : Environment.getExternalStorageDirectory().getAbsolutePath() + "/Files/log.txt";
    // ------------------------------------------------------------------------------------------
    // TODO [라이브러리 설치 버전] : implementation group: 'com.jcraft', name: 'jsch', version: '0.1.54'
    // ------------------------------------------------------------------------------------------
    public synchronized boolean uploadFile(String originPath, String sftpPath, String sftpFileName) {
        S_Log._D_("SFTP 파일 전송 경로 확인", new String[]{
                "originPath :: " + String.valueOf(originPath),
                "ftpPath :: " + String.valueOf(sftpPath),
                "ftpFileName :: " + String.valueOf(sftpFileName)
        });


        /*
        D  ===================================================================
        [LOG :: CLASS PLACE :: com.example.javaproject.C_Module.C_SFTP_Client_Module$1.init(C_SFTP_Client_Module.java:337)]
                ----------------------------------------------------
        [LOG :: NOW TIME :: 2024-08-31 12:24:38 토요일]
                ----------------------------------------------------
        [LOG :: DESCRIPTION :: SFTP [초기] 파일 전송 정보 확인]
                ----------------------------------------------------
        [LOG :: src [원본] :: /data/user/0/com.example.javaproject/files/LOG_FILE_FOLDER/APP_CRASH_LOG_FILE.txt]
                ----------------------------------------------------
        [LOG :: dest [목적지] :: /test/log.txt]
        D  ===================================================================


        D  ===================================================================
        [LOG :: CLASS PLACE :: com.example.javaproject.C_Module.C_SFTP_Client_Module$1.count(C_SFTP_Client_Module.java:361)]
                ----------------------------------------------------
        [LOG :: NOW TIME :: 2024-08-31 12:24:38 토요일]
                ----------------------------------------------------
        [LOG :: DESCRIPTION :: SFTP [실시간] 파일 전송 정보 확인]
                ----------------------------------------------------
        [LOG :: progress :: 100]
        D  ===================================================================


        W  ===================================================================
        [LOG :: CLASS PLACE :: com.example.javaproject.C_Module.C_SFTP_Client_Module$1.end(C_SFTP_Client_Module.java:374)]
                ----------------------------------------------------
        [LOG :: NOW TIME :: 2024-08-31 12:24:38 토요일]
                ----------------------------------------------------
        [LOG :: DESCRIPTION :: SFTP [파일 전송] 완료 확인]
        W  ===================================================================
        // */


        // [변수 초기화]
        isSend = false;


        // [로직 처리 수행]
        try {

            if (channelSftp != null && channelSftp.isConnected() == true){

                if (C_Util.stringNotNullMulti(new String[]{originPath, sftpPath, sftpFileName}) == true){

                    // [클라이언트 파일 읽기]
                    File file = new File(originPath);

                    if (file.exists() == true){ // [해당 파일이 존재하는 경우]

                        //*
                        String serverDir = sftpPath;
                        if (serverDir.endsWith("/") == true){
                            serverDir += sftpFileName;
                        }
                        else {
                            serverDir += "/" + sftpFileName;
                        }

                        channelSftp.put(originPath, serverDir, new SftpProgressMonitor() {

                            private long FileSize = 0; // [전체 파일 사이즈]
                            private long sendFileSize = 0; // [실시간 전송 파일 사이즈]

                            @Override
                            public void init(int op, String src, String dest, long max) {
                                S_Log._D_("SFTP [초기] 파일 전송 정보 확인", new String[]{
                                        "src [원본] :: " + String.valueOf(src),
                                        "dest [목적지] :: " + String.valueOf(dest)
                                });

                                // [변수에 지정 수행]
                                FileSize = max;
                            }

                            @Override
                            public boolean count(long count) {

                                // -----------------------------------------------------
                                // TODO [java.io.IOException: Pipe closed 발생 시 참고]
                                // -----------------------------------------------------
                                // build.gradle 라이브러리 의존성 버전 변경 [0.1.42]
                                // -----------------------------------------------------

                                if (FileSize != 0 && FileSize > 0){

                                    sendFileSize += count;
                                    long progress = sendFileSize * 100 / FileSize;

                                    if ((int) progress != 0){
                                        S_Log._D_("SFTP [실시간] 파일 전송 정보 확인", new String[]{
                                                "progress :: " + String.valueOf(progress)
                                        });
                                    }

                                }

                                return true;
                            }

                            @Override
                            public void end() {
                                S_Log._W_("SFTP [파일 전송] 완료 확인", null);

                                // [변수 삽입]
                                isSend = true;
                            }
                        });
                        // */

                    }
                    else {
                        S_Log._E_("SFTP [파일 전송] 에러 확인", new String[]{ "ERROR :: 클라이언트에 저장된 파일 확인 필요 (file not exists)" });
                    }

                }
                else {
                    S_Log._E_("SFTP [파일 전송] 에러 확인", new String[]{ "ERROR :: Input Data Is Null" });
                }

            }

        }
        catch (Exception e){
            e.printStackTrace();
        }


        // [로그 출력 수행]
        S_Log._W_("SFTP 파일 전송 결과 확인", new String[]{ "RETURN :: " + String.valueOf(isSend) });


        // [리턴 반환 수행]
        return isSend;
    }

 

반응형
Comments