使用java进行ftp文件上传出现425错误
怪我咯
怪我咯 2017-04-18 10:26:51
0
1
874

问题背景:在本地使用java代码进行文件上传到远程的ftp服务器上,出现了425错误

使用的是commons-net-3.5.jar中的ftpclient进行文件上传,以下是上传的代码:

/**
     * 向FTP服务器上传文件
     * @param host FTP服务器hostname 
     * @param port FTP服务器端口 
     * @param username FTP登录账号 
     * @param password FTP登录密码 
     * @param basePath FTP服务器基础目录
     * @param filePath FTP服务器文件存放路径。例如分日期存放:/2015/01/01。文件的路径为basePath+filePath
     * @param filename 上传到FTP服务器上的文件名 
     * @param input 输入流 
     * @return 成功返回true,否则返回false 
     * */
    public static boolean upload(String host, int port, String username, String password,
            String basePath, String filePath, String filename, InputStream input) {
        boolean result = false;
        
        FTPClient ftp = new FTPClient();
        try {
            // 登录
            if(!loginToFtp(ftp, host, port, username, password))
                return result;
            
            //切换到上传目录
            if (!ftp.changeWorkingDirectory(basePath + filePath)) {
                //如果目录不存在创建目录
                String[] dirs = filePath.split("/");
                String tempPath = basePath;
                for (String dir : dirs) {
                    if (null == dir || "".equals(dir)) continue;
                    tempPath += "/" + dir;
                    if (!ftp.changeWorkingDirectory(tempPath)) {
                        if (!ftp.makeDirectory(tempPath)) {
                            return result;
                        } else {
                            ftp.changeWorkingDirectory(tempPath);
                        }
                    }
                }
            }
            
            //设置上传文件的类型为二进制类型
            ftp.setFileType(FTP.BINARY_FILE_TYPE);
            //上传文件
            if (!ftp.storeFile(filename, input)) {
                return result;
            }
            input.close();
            ftp.logout();
            result = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
        
        return result;
    }
    
    // 登录ftp服务器
    private static boolean loginToFtp(FTPClient ftp, String host, int port, String username, String password) throws SocketException, IOException {
        int reply;
        ftp.connect(host, port);
        // 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
        ftp.login(username, password);// 登录
        reply = ftp.getReplyCode();
        if (!FTPReply.isPositiveCompletion(reply)) {
            ftp.disconnect();
            return false;
        }
        
        return true;
    }

备注:

1.使用windows自身的ftp客户端可以进行上传至远程服务器
2.将ftp服务器放在本地同样可以上传  
怪我咯
怪我咯

走同样的路,发现不同的人生

répondre à tous(1)
迷茫

Mise à jour le 25 janvier 2017

Plus tard, j'ai de nouveau rencontré l'erreur de téléchargement 425 et j'ai découvert que le problème principal était le mode actif et le mode passif de FTP. Si le client ouvre le port (ou ferme le pare-feu) et télécharge en mode actif, il n'y aura aucun problème. Si le client active le pare-feu ou si le pare-feu n'ouvre pas le port correspondant, le mode actif est utilisé pour télécharger des fichiers. Bien que vous puissiez vous connecter, le mode passif peut être utilisé pour résoudre le problème. Le client doit également être défini sur. mode passif.

==================

Après avoir accidentellement remplacé Tomcat, j'ai trouvé la raison. Auparavant, j'utilisais Tomcat7 fourni avec myeclipse, ce qui peut entrer en conflit avec FTP. Après être passé à Tomcat8.X, je peux télécharger normalement.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal