org.apache.commons.net.*" 코드를 추가합니다."/> org.apache.commons.net.*" 코드를 추가합니다.">

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

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

藏色散人
藏色散人원래의
2020-05-30 10:37:482902검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:SpringMVC 작동 방식다음 기사:SpringMVC 작동 방식