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

问题背景:在本地使用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服务器放在本地同样可以上传  
怪我咯
怪我咯

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

membalas semua(1)
迷茫

Dikemas kini pada 25 Januari 2017

Kemudian saya menghadapi ralat muat naik 425 sekali lagi dan mendapati masalah utama ialah mod aktif dan mod pasif ftp. Jika klien membuka port (atau menutup firewall) dan memuat naik dalam mod aktif, tidak akan ada masalah. Jika klien menghidupkan firewall atau firewall tidak membuka port yang sepadan, mod aktif digunakan untuk memuat naik fail Walaupun anda boleh log masuk, mod pasif boleh digunakan untuk menyelesaikan masalah tersebut mod pasif.

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

Setelah menggantikan tomcat secara tidak sengaja, saya jumpa puncanya. Sebelum ini, saya menggunakan tomcat7 yang disertakan dengan myeclipse, yang mungkin bercanggah dengan ftp Selepas menukar kepada tomcat8.X, saya boleh memuat naik seperti biasa.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan