Notice
Recent Posts
Recent Comments
Link
투케이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;
}
반응형
'Android' 카테고리의 다른 글
Comments