首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

请问客户端的文件夹上传到FTP服务器 以及下载到本地 的有关问题

2012-01-29 
请教客户端的文件夹上传到FTP服务器 以及下载到本地 的问题我在客户端打开JSP页面,想把我本地的一个文件夹

请教客户端的文件夹上传到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[] = source.listFiles();                for (int i = 0; i < sourcefile.length; i++) {                    if (sourcefile[i].exists()) {                        if (sourcefile[i].isDirectory()) {                            this.processfile(prefix,sourcefile[i], ftpclient);                        } else {                            ftpclient.cd(cheangpath(prefix,sourcefile[i].getPath()));                            ftpclient.binary();                            os = ftpclient.put(sourcefile[i].getName());                            byte[] bytes = new byte[1024];                            is = new FileInputStream(sourcefile[i]);                            // 开始复制                            int c;                            // 暂未考虑中途终止的情况                            while ((c = is.read(bytes)) != -1) {                                os.write(bytes, 0, c);                            }                            is.close();                            os.close();                        }                    }                }            }else{                ftpclient.cd(cheangpath(prefix,source.getPath()));                ftpclient.binary();                os = ftpclient.put(source.getName());                byte[] bytes = new byte[1024];                is = new FileInputStream(source);                // 开始复制                int c;                // 暂未考虑中途终止的情况                while ((c = is.read(bytes)) != -1) {                    os.write(bytes, 0, c);                }                is.close();                os.close();            }        } else {            throw new Exception("此文件或文件夹[" + source.getName() + "]有误或不存在!");        }    }        /**      * 创建文件夹      *       * @param dir      * @param ftpclient      * @throws exception      */    private void createdir(String dir, FtpClient ftpclient) throws Exception {        ftpclient.ascii();        StringTokenizer s = new StringTokenizer(dir, "/");        s.countTokens();        String pathname = "";        while (s.hasMoreElements()) {           pathname = pathname + "/" + (String) s.nextElement();           try {              ftpclient.sendServer("mkd " + pathname + "\r\n");// 如果服务器上有该目录,不会被创建           } catch (Exception e) {               e = null;           }           ftpclient.readServerResponse();        }        ftpclient.binary();    }        /**      * 获取当前的ftp路径      *       * @param prefix      * @param path      * @return      */    private String cheangpath(String prefix,String path) throws Exception {        path = path.substring(localfilefullname.length()).replace("\\", "/");        if ("".equals(path)) {            path = "/";        } else {            path = path.substring(0, path.lastIndexOf("/") + 1);        }        path = prefix + path;        return path;    }    /**      * 递归算法,取得文件的字节大小      *       * @param strName 文件名带绝对路径          * @return      */    public Long getSize(String strName) {        Long TotalSize = 0L;        File f = new File(strName);        if (f.isFile()){            return f.length();        }else {            if (f.isDirectory()) {                File[] contents = f.listFiles();                for (int i = 0; i < contents.length; i++) {                    if (contents[i].isFile())                        TotalSize += contents[i].length();                    else {                        if (contents[i].isDirectory())                            TotalSize += getSize(contents[i].getPath());                    }                }            }        }        return TotalSize;    }         



[解决办法]
程序本身是不是读取的本地文件.
[解决办法]
你怎么解决的,我也遇到了,在A电脑上面部署了项目,FTP服务器也部署在A电脑上面,在B电脑上面跑的时候文件却下载到了A,而不是B,挺郁闷的,楼主你怎么解决的!可以把代码全部贴出来吗
[解决办法]
对呀,怎么解决的。。。。。。

热点排行