> Java > java지도 시간 > 본문

Java FTP 업로드가 실패하는 경우 수행할 작업

藏色散人
풀어 주다: 2020-05-30 10:37:48
원래의
2905명이 탐색했습니다.

Java FTP 업로드가 실패하는 경우 수행할 작업

Java FTP 업로드가 실패하면 어떻게 해야 하나요?

최근에 지정된 FTP 디렉터리에 파일을 업로드해야 하는 프로젝트를 진행했습니다. 그러다가 프로젝트가 tomcat에 성공적으로 배포될 수 있다는 것을 알았지만 weblogic에 배포할 때 실패했습니다. 인터넷에서 많은 이유를 찾았지만 아직은 실패했습니다. 그것을 해결했습니다.

boolean isSuccee = ftp.storeFile(fileName, in);
로그인 후 복사

여기서 계속 false를 반환하고 업로드가 실패합니다

그런 다음 온라인 솔루션은 ftp.enterLocalPassiveMode()를 추가하는 것입니다. 여전히 문제가 해결되지 않습니다.

코드로 직접 이동하세요.

먼저 FTP 서비스를 연결하세요

private static FTPClient ftp;
/*
* 获得ftp链接
*/
public static boolean connectFtp(Ftp ftpInfo) throws Exception {
ftp = new FTPClient();
boolean flag = false;
int reply;
if(ftpInfo.getPort() != null && !"".equals(ftpInfo.getPort())){
ftp.connect(ftpInfo.getIpAddr(),ftpInfo.getPort());
}else{
ftp.connect(ftpInfo.getIpAddr());
}
ftp.login(ftpInfo.getUserName(), ftpInfo.getPwd());
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return flag;
}
ftp.changeWorkingDirectory(ftpInfo.getPath());
flag = true;
return flag;
}
로그인 후 복사

그런 다음 파일을 업로드하세요.

/**
* 文件上传
* @param file
* @throws IOException
*/
    public static void uploadFile(File file) throws IOException {  
        FileInputStream in = null;  
        try {  
            in = new FileInputStream(file);  
  
            String fileName = file.getName();
            /**
             * ftp.enterLocalPassiveMode();
             * 这个方法的意思就是每次数据连接之前,ftp client告诉ftp server开通一个端口来传输数据。
             * 为什么要这样做呢,因为ftp server可能每次开启不同的端口来传输数据,
             * 但是在linux上或者其他服务器上面,由于安全限制,可能某些端口没有开启,所以就出现阻塞。
             */
            ftp.enterLocalPassiveMode();
            ftp.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
            boolean isSuccee = ftp.storeFile(fileName, in);
            int i = 1;
            String newFileName = null;
            while (!isSuccee) {  //多次上传数据直到成功(最多12次) 
            newFileName = i + fileName;
            isSuccee = ftp.storeFile(newFileName, in);
            i++;
            if(i>11){
            break;
            }
}
            String ftpPath = ServiceConstans.ONEPORT_FTP_PATH;//驳船配载图上传到FTP的路径
            if (isSuccee ) {   //成功
                logger.info("FTP:文件上传成功!");
                if( newFileName == null){
                ftp.rename(fileName, ftpPath+fileName);  // 第一次上传就成功
                }else{
                ftp.rename(newFileName, ftpPath+fileName);
                }
            } else {  
            logger.info("FTP:文件上传失败!!");
            throw new BusiException("FTP:文件上传失败!!");
            }  
        } catch (FileNotFoundException e) {  
            logger.error("未找到相关文件!", e);  
        } catch (IOException e) {  
        logger.error("上传文件失败!", e);  
        } finally {  
        in.close();
        //file.delete();//删除源文件
        }  
    }
로그인 후 복사

해결 방법:

코드에 문제가 없으므로 서버 측에서 확인했습니다.

웹 로직의 jar 패키지 버전이 in의 jar 패키지 버전보다 낮기 때문입니다. 프로젝트에서 이 프로젝트의 jar 패키지를 검색하도록 강제 설정하지 않으면 weblogic이 먼저 로드됩니다. 파일의 jar 패키지는 버전이 너무 낮아서 업로드하지 못했습니다

Java FTP 업로드가 실패하는 경우 수행할 작업

그래서 패키지 org.apache.commons.net.* 이렇게 하면 프로젝트에서 jar 패키지를 로드하는 데 우선순위가 부여됩니다.

Java FTP 업로드가 실패하는 경우 수행할 작업

관련 추천: "java learning"

위 내용은 Java FTP 업로드가 실패하는 경우 수행할 작업의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿