org.apache.commons.net.*" 코드를 추가합니다."/> org.apache.commons.net.*" 코드를 추가합니다.">
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 패키지는 버전이 너무 낮아서 업로드하지 못했습니다
그래서 패키지 org.apache.commons.net.* 이렇게 하면 프로젝트에서 jar 패키지를 로드하는 데 우선순위가 부여됩니다.
관련 추천: "java learning"
위 내용은 Java FTP 업로드가 실패하는 경우 수행할 작업의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!