日期:2014-05-17  浏览次数:20812 次

请教客户端的文件夹上传到FTP服务器 以及下载到本地 的问题
我在客户端打开JSP页面,想把我本地的一个文件夹上传到FTP服务器上去,
可是上传失败,报的错误是“此文件或文件夹有误或不存在!”
但是要是直接在服务器上跑这个程序的话,可以正常上传,就是在客户端跑的时候,
想把客户端的一个文件上传到服务器的时候报错误!

还有就是我下载的时候,却保存在了服务器的盘符下,而不是保存在客户单的本地路径。
我的代码哪里写的不对啊,请帮忙指正!
谢谢
代码如下:
Java code

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.StringTokenizer;

import sun.net.TelnetInputStream;
import sun.net.ftp.FtpClient;

/**
 * 对ftp进行上传、下载文件夹操作
 * 
 */
public class Ftp {
    // ftp服务器的IP地址
    private String ip = "127.0.0.1";  
    // 用户名
    private String username = "test"; 
    // 密码
    private String password = "test"; 
    // 需要上传的目录,带绝对路径
    private String localfilefullname = "";
    FtpClient ftpclient = null;
    OutputStream os = null;
    FileInputStream is = null;
    
    /**
     * 取得参数值
     * 
     * @param serverIP 上传IP
     * @param username 用户名
     * @param password 密码
     */
    public Ftp(String serverIP,String username, String password) {
        //IP
        this.ip = serverIP; 
        //用户名
        this.username = username; 
        //密码
        this.password = password;
    }

    /**
      * 检查文件夹是否存在
      * 
      * @param dir
      * @param ftpclient
      * @return
      */
    private boolean isdirexist(String dir, FtpClient ftpclient)throws Exception {
        try {
            ftpclient.cd(dir);
        } catch (Exception e) {
            return false;
        }
        return true;
    }
    /**
      * ftp上传
      * 
      * @param prefix 创建的文件夹名
      * @param localfilefullname 上传的源文件夹
      * @return
      */
    public boolean upload(String prefix,String localfilefullname)throws Exception {
        this.localfilefullname = localfilefullname;
        try {
            String savefilename = localfilefullname;
            // 新建一个ftp客户端连
            ftpclient = new FtpClient(); 
            
            ftpclient.openServer(this.ip);
            ftpclient.login(this.username, this.password);

            // 打开本地待上传的文件
            File file_in = new File(savefilename);
            processfile(prefix,file_in, ftpclient);
            if (is != null) {
                is.close();
            }
            if (os != null) {
                os.close();
            }
            if (ftpclient != null) {
                ftpclient.closeServer();
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            System.err.println("exception e in ftp upload(): " + e.toString());
            return false;
        } finally {
            if (is != null) {
                is.close();
            }
            if (os != null) {
                os.close();
            }
            if (ftpclient != null) {
                ftpclient.closeServer();
            }
        }
    }
    
    /**
      * 用递归算法来上传文件
      * 
      * @param prefix 创建的文件夹名
      * @param source 路径
      * @param ftpclient
      * @throws exception
      */
    private void processfile(String prefix,File source, FtpClient ftpclient)throws Exception {
        if (source.exists()) {
            if (source.isDirectory()) {
                //对文件路径进行转义
                String path = prefix + source.getPath().substring(localfilefullname.length()).replace("\\", "/");
                if (!isdirexist(path, ftpclient)) {
                    //创建文件夹
                    createdir(path, ftpclient);
                }
                File sourcefile[