求Java web FTP上传文件代码。

J2EE 码拜 9年前 (2015-04-07) 1235次浏览 0个评论
 

之前在网上找到过几个案例,可是都不成功,求大神给一段代码,FTP上传文件的!在线等,在线试,服务器的FTP已经装好。

求Java web FTP上传文件代码。
  
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.regex.Matcher;
 
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
 
public class ClientFTP {
 
    public FTPClient ftp = null;
     
    public ClientFTP() {
        ftp = new FTPClient();
    }
 
    public boolean uploadFile(String serverpath, String file) {
        // 初始表示上传失败
        boolean success = false;
        // 创建FTPClient对象
        try {
            // 转到指定上传目录
            serverpath = gbkToIso8859(serverpath);
            if (!checkPathExist(iso8859ToGbk(serverpath)))
                return false;
            if (!ftp.changeWorkingDirectory(serverpath)) {
                if(!ftp.makeDirectory(serverpath)){
                    return false;
                }
            }
 
            // 输入流
            InputStream input = null;
            try {
                input = new FileInputStream((file));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            // 将上传文件存储到指定目录
            String path = serverpath + "\" + getFilename(file);
            if (!ftp.storeFile(path, input)) {
                return false;
            }
 
            // 关闭输入流
            input.close();
            // 退出ftp
 
            // 表示上传成功
            success = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                ftp.logout();
                disconnect();
            } catch (IOException ioe) {
            }
 
        }
        return success;
    }
     
    public boolean isConnected(){
        return ftp.isConnected();
    }
 
    /**
     * 从FTP服务器下载文件
     * 
     * @param ip
     *            FTP服务器ip e.g:192.168.8.22
     * @param port
     *            FTP服务器端口
     * @param username
     *            FTP登录账号
     * @param password
     *            FTP登录密码
     * @param serverpath
     *            FTP服务器上的相对路径 默认缺省时指向主目录
     * @param fileName
     *            要下载的文件名
     * @param localPath
     *            下载后保存到本地的路径 不含文件名
     * @return 成功返回true,否则返回false
     */
    public boolean downFile(String serverpath, String fileName, String localPath) { // 初始表示下载失败
        boolean success = false;
        // 创建FTPClient对象
        try {
 
            // 转到指定下载目录
            serverpath = gbkToIso8859(serverpath);
            ftp.changeWorkingDirectory(this.iso8859ToGbk(serverpath));
            // 列出该目录下所有文件
            FTPFile[] fs = ftp.listFiles();
            fileName = this.gbkToIso8859(fileName);
            localPath = this.gbkToIso8859(localPath);
 
            // 遍历所有文件,找到指定的文件
 
            for (int i =   0; i < fs.length; i++) {
                FTPFile f = fs[i];
 
                if (f.getName().equals(iso8859ToGbk(fileName))) {
                    // 根据绝对路径初始化文件
                    File localFile = new File(iso8859ToGbk(localPath)
                            + File.separator + f.getName());
                    File localFileDir = new File(iso8859ToGbk(localPath));
                    // 保存路径不存在时创建
                    if (!localFileDir.exists()) {
                        localFileDir.mkdirs();
                    }
                    // 输出流
                    OutputStream is = new FileOutputStream(localFile);
                    // 下载文件
                    ftp.retrieveFile(f.getName(), is);
                    is.close();
                }
            }
            // 下载成功
            success = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                ftp.logout();
                disconnect();
            } catch (IOException ioe) {
                ioe.printStackTrace();
            }
        }
        return success;
    }
 
    /**
     * 
     * 查找指定目录是否存在 不存在创建目录
     * 
     * @param FTPClient
     *            ftpClient 要检查的FTP服务器
     * @param String
     *            filePath 要查找的目录
     * @return boolean:存在:true,不存在:false
     * @throws IOException
     */
    public boolean checkPathExist(String filePath) throws IOException {
        boolean existFlag = false;
        try {
            if (filePath != null && !filePath.equals("")) {
                 File dir = new File(filePath);  
                    if (dir.exists()) {  
                        return true;  
                    }  
                    if (!filePath.endsWith(File.separator)) {  
                        filePath = filePath + File.separator;  
                    }  
                    //创建目录  
                    if (dir.mkdirs()) {  
                        existFlag = true;  
                    } 
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return existFlag;
    }
 
    /**
     * 根据绝对路径获得文件名
     * 
     * @param file
     *            文件绝对路径 e.g: e.g: E:/log/log.txt OR E:\log\log.txt
     * @return 转码后的文件名
     */
    private String getFilename(String file) {
        // 文件名
        String filename = "";
        if (file != null && !file.equals("")) {
            file = file.replaceAll(Matcher.quoteReplacement("\"), "/");
            String[] strs = file.split("/");
            filename = strs[strs.length -   1];
        }
        filename = gbkToIso8859(filename);// 转码
        return filename;
    }
 
    /**
     * 转码[ISO-8859-1 -> GBK] 不同的平台需要不同的转码
     * 
     * @param obj
     * @return
     */
    private String iso8859ToGbk(Object obj) {
        try {
            if (obj == null)
                return "";
            else {
                String str = new String(obj.toString().getBytes("iso-8859-1"),
                        "GBK");
                return str;
 
            }
        } catch (Exception e) {
            return "";
        }
    }
 
    /**
     * 转码[GBK -> ISO-8859-1] 不同的平台需要不同的转码
     * 
     * @param obj
     * @return
     */
    private String gbkToIso8859(Object obj) {
        try {
            if (obj == null)
                return "";
            else
                return new String(obj.toString().getBytes("GBK"), "iso-8859-1");
        } catch (Exception e) {
            return "";
        }
    }
 
    /** */
    /**
     * 连接到FTP服务器
     * 
     * @param hostname
     *            主机名
     * @param port
     *            端口
     * @param username
     *            用户名
     * @param password
     *            密码
     * @return 是否连接成功
     * @throws IOException
     */
    public boolean connect(String hostname, int port, String username,
            String password) throws IOException {
        ftp.connect(hostname, port);
        ftp.setControlEncoding("GBK");
        FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
        conf.setServerLanguageCode("zh");
        int reply = ftp.getReplyCode();
        if (FTPReply.isPositiveCompletion(reply)) {
            if (ftp.login(username, password)) {
                ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
                ftp.setControlEncoding("GBK");
                ftp.enterLocalPassiveMode();
                return true;
            }
        }
        disconnect();
        return false;
    }
 
    /** */
    /**
     * 断开与远程服务器的连接
     * 
     * @throws IOException
     */
    public void disconnect() throws IOException {
        if (ftp.isConnected()) {
            ftp.disconnect();
        }
    }
 
    public void setFtp(FTPClient ftp) {
        this.ftp = ftp;
    }
 
}

上传的方法没问题,下载那个有的一点小瑕疵,你可以试试

求Java web FTP上传文件代码。
引用 1 楼 duguqiubaibenr 的回复:
  
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.regex.Matcher;
 
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
 
public class ClientFTP {
 
    public FTPClient ftp = null;
     
    public ClientFTP() {
        ftp = new FTPClient();
    }
 
    public boolean uploadFile(String serverpath, String file) {
        // 初始表示上传失败
        boolean success = false;
        // 创建FTPClient对象
        try {
            // 转到指定上传目录
            serverpath = gbkToIso8859(serverpath);
            if (!checkPathExist(iso8859ToGbk(serverpath)))
                return false;
            if (!ftp.changeWorkingDirectory(serverpath)) {
                if(!ftp.makeDirectory(serverpath)){
                    return false;
                }
            }
 
            // 输入流
            InputStream input = null;
            try {
                input = new FileInputStream((file));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            // 将上传文件存储到指定目录
            String path = serverpath + "\" + getFilename(file);
            if (!ftp.storeFile(path, input)) {
                return false;
            }
 
            // 关闭输入流
            input.close();
            // 退出ftp
 
            // 表示上传成功
            success = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                ftp.logout();
                disconnect();
            } catch (IOException ioe) {
            }
 
        }
        return success;
    }
     
    public boolean isConnected(){
        return ftp.isConnected();
    }
 
    /**
     * 从FTP服务器下载文件
     * 
     * @param ip
     *            FTP服务器ip e.g:192.168.8.22
     * @param port
     *            FTP服务器端口
     * @param username
     *            FTP登录账号
     * @param password
     *            FTP登录密码
     * @param serverpath
     *            FTP服务器上的相对路径 默认缺省时指向主目录
     * @param fileName
     *            要下载的文件名
     * @param localPath
     *            下载后保存到本地的路径 不含文件名
     * @return 成功返回true,否则返回false
     */
    public boolean downFile(String serverpath, String fileName, String localPath) { // 初始表示下载失败
        boolean success = false;
        // 创建FTPClient对象
        try {
 
            // 转到指定下载目录
            serverpath = gbkToIso8859(serverpath);
            ftp.changeWorkingDirectory(this.iso8859ToGbk(serverpath));
            // 列出该目录下所有文件
            FTPFile[] fs = ftp.listFiles();
            fileName = this.gbkToIso8859(fileName);
            localPath = this.gbkToIso8859(localPath);
 
            // 遍历所有文件,找到指定的文件
 
            for (int i =   0; i < fs.length; i++) {
                FTPFile f = fs[i];
 
                if (f.getName().equals(iso8859ToGbk(fileName))) {
                    // 根据绝对路径初始化文件
                    File localFile = new File(iso8859ToGbk(localPath)
                            + File.separator + f.getName());
                    File localFileDir = new File(iso8859ToGbk(localPath));
                    // 保存路径不存在时创建
                    if (!localFileDir.exists()) {
                        localFileDir.mkdirs();
                    }
                    // 输出流
                    OutputStream is = new FileOutputStream(localFile);
                    // 下载文件
                    ftp.retrieveFile(f.getName(), is);
                    is.close();
                }
            }
            // 下载成功
            success = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                ftp.logout();
                disconnect();
            } catch (IOException ioe) {
                ioe.printStackTrace();
            }
        }
        return success;
    }
 
    /**
     * 
     * 查找指定目录是否存在 不存在创建目录
     * 
     * @param FTPClient
     *            ftpClient 要检查的FTP服务器
     * @param String
     *            filePath 要查找的目录
     * @return boolean:存在:true,不存在:false
     * @throws IOException
     */
    public boolean checkPathExist(String filePath) throws IOException {
        boolean existFlag = false;
        try {
            if (filePath != null && !filePath.equals("")) {
                 File dir = new File(filePath);  
                    if (dir.exists()) {  
                        return true;  
                    }  
                    if (!filePath.endsWith(File.separator)) {  
                        filePath = filePath + File.separator;  
                    }  
                    //创建目录  
                    if (dir.mkdirs()) {  
                        existFlag = true;  
                    } 
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return existFlag;
    }
 
    /**
     * 根据绝对路径获得文件名
     * 
     * @param file
     *            文件绝对路径 e.g: e.g: E:/log/log.txt OR E:\log\log.txt
     * @return 转码后的文件名
     */
    private String getFilename(String file) {
        // 文件名
        String filename = "";
        if (file != null && !file.equals("")) {
            file = file.replaceAll(Matcher.quoteReplacement("\"), "/");
            String[] strs = file.split("/");
            filename = strs[strs.length -   1];
        }
        filename = gbkToIso8859(filename);// 转码
        return filename;
    }
 
    /**
     * 转码[ISO-8859-1 -> GBK] 不同的平台需要不同的转码
     * 
     * @param obj
     * @return
     */
    private String iso8859ToGbk(Object obj) {
        try {
            if (obj == null)
                return "";
            else {
                String str = new String(obj.toString().getBytes("iso-8859-1"),
                        "GBK");
                return str;
 
            }
        } catch (Exception e) {
            return "";
        }
    }
 
    /**
     * 转码[GBK -> ISO-8859-1] 不同的平台需要不同的转码
     * 
     * @param obj
     * @return
     */
    private String gbkToIso8859(Object obj) {
        try {
            if (obj == null)
                return "";
            else
                return new String(obj.toString().getBytes("GBK"), "iso-8859-1");
        } catch (Exception e) {
            return "";
        }
    }
 
    /** */
    /**
     * 连接到FTP服务器
     * 
     * @param hostname
     *            主机名
     * @param port
     *            端口
     * @param username
     *            用户名
     * @param password
     *            密码
     * @return 是否连接成功
     * @throws IOException
     */
    public boolean connect(String hostname, int port, String username,
            String password) throws IOException {
        ftp.connect(hostname, port);
        ftp.setControlEncoding("GBK");
        FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
        conf.setServerLanguageCode("zh");
        int reply = ftp.getReplyCode();
        if (FTPReply.isPositiveCompletion(reply)) {
            if (ftp.login(username, password)) {
                ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
                ftp.setControlEncoding("GBK");
                ftp.enterLocalPassiveMode();
                return true;
            }
        }
        disconnect();
        return false;
    }
 
    /** */
    /**
     * 断开与远程服务器的连接
     * 
     * @throws IOException
     */
    public void disconnect() throws IOException {
        if (ftp.isConnected()) {
            ftp.disconnect();
        }
    }
 
    public void setFtp(FTPClient ftp) {
        this.ftp = ftp;
    }
 
}

上传的方法没问题,下载那个有的一点小瑕疵,你可以试试

大神,这个怎么用啊?

求Java web FTP上传文件代码。
这个写的还可以,可以参考下
http://blog.csdn.net/hbcui1984/article/details/2720204
求Java web FTP上传文件代码。
引用 2 楼 qq_22926005 的回复:
Quote: 引用 1 楼 duguqiubaibenr 的回复:
  
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.regex.Matcher;
 
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
 
public class ClientFTP {
 
    public FTPClient ftp = null;
     
    public ClientFTP() {
        ftp = new FTPClient();
    }
 
    public boolean uploadFile(String serverpath, String file) {
        // 初始表示上传失败
        boolean success = false;
        // 创建FTPClient对象
        try {
            // 转到指定上传目录
            serverpath = gbkToIso8859(serverpath);
            if (!checkPathExist(iso8859ToGbk(serverpath)))
                return false;
            if (!ftp.changeWorkingDirectory(serverpath)) {
                if(!ftp.makeDirectory(serverpath)){
                    return false;
                }
            }
 
            // 输入流
            InputStream input = null;
            try {
                input = new FileInputStream((file));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            // 将上传文件存储到指定目录
            String path = serverpath + "\" + getFilename(file);
            if (!ftp.storeFile(path, input)) {
                return false;
            }
 
            // 关闭输入流
            input.close();
            // 退出ftp
 
            // 表示上传成功
            success = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                ftp.logout();
                disconnect();
            } catch (IOException ioe) {
            }
 
        }
        return success;
    }
     
    public boolean isConnected(){
        return ftp.isConnected();
    }
 
    /**
     * 从FTP服务器下载文件
     * 
     * @param ip
     *            FTP服务器ip e.g:192.168.8.22
     * @param port
     *            FTP服务器端口
     * @param username
     *            FTP登录账号
     * @param password
     *            FTP登录密码
     * @param serverpath
     *            FTP服务器上的相对路径 默认缺省时指向主目录
     * @param fileName
     *            要下载的文件名
     * @param localPath
     *            下载后保存到本地的路径 不含文件名
     * @return 成功返回true,否则返回false
     */
    public boolean downFile(String serverpath, String fileName, String localPath) { // 初始表示下载失败
        boolean success = false;
        // 创建FTPClient对象
        try {
 
            // 转到指定下载目录
            serverpath = gbkToIso8859(serverpath);
            ftp.changeWorkingDirectory(this.iso8859ToGbk(serverpath));
            // 列出该目录下所有文件
            FTPFile[] fs = ftp.listFiles();
            fileName = this.gbkToIso8859(fileName);
            localPath = this.gbkToIso8859(localPath);
 
            // 遍历所有文件,找到指定的文件
 
            for (int i =   0; i < fs.length; i++) {
                FTPFile f = fs[i];
 
                if (f.getName().equals(iso8859ToGbk(fileName))) {
                    // 根据绝对路径初始化文件
                    File localFile = new File(iso8859ToGbk(localPath)
                            + File.separator + f.getName());
                    File localFileDir = new File(iso8859ToGbk(localPath));
                    // 保存路径不存在时创建
                    if (!localFileDir.exists()) {
                        localFileDir.mkdirs();
                    }
                    // 输出流
                    OutputStream is = new FileOutputStream(localFile);
                    // 下载文件
                    ftp.retrieveFile(f.getName(), is);
                    is.close();
                }
            }
            // 下载成功
            success = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                ftp.logout();
                disconnect();
            } catch (IOException ioe) {
                ioe.printStackTrace();
            }
        }
        return success;
    }
 
    /**
     * 
     * 查找指定目录是否存在 不存在创建目录
     * 
     * @param FTPClient
     *            ftpClient 要检查的FTP服务器
     * @param String
     *            filePath 要查找的目录
     * @return boolean:存在:true,不存在:false
     * @throws IOException
     */
    public boolean checkPathExist(String filePath) throws IOException {
        boolean existFlag = false;
        try {
            if (filePath != null && !filePath.equals("")) {
                 File dir = new File(filePath);  
                    if (dir.exists()) {  
                        return true;  
                    }  
                    if (!filePath.endsWith(File.separator)) {  
                        filePath = filePath + File.separator;  
                    }  
                    //创建目录  
                    if (dir.mkdirs()) {  
                        existFlag = true;  
                    } 
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return existFlag;
    }
 
    /**
     * 根据绝对路径获得文件名
     * 
     * @param file
     *            文件绝对路径 e.g: e.g: E:/log/log.txt OR E:\log\log.txt
     * @return 转码后的文件名
     */
    private String getFilename(String file) {
        // 文件名
        String filename = "";
        if (file != null && !file.equals("")) {
            file = file.replaceAll(Matcher.quoteReplacement("\"), "/");
            String[] strs = file.split("/");
            filename = strs[strs.length -   1];
        }
        filename = gbkToIso8859(filename);// 转码
        return filename;
    }
 
    /**
     * 转码[ISO-8859-1 -> GBK] 不同的平台需要不同的转码
     * 
     * @param obj
     * @return
     */
    private String iso8859ToGbk(Object obj) {
        try {
            if (obj == null)
                return "";
            else {
                String str = new String(obj.toString().getBytes("iso-8859-1"),
                        "GBK");
                return str;
 
            }
        } catch (Exception e) {
            return "";
        }
    }
 
    /**
     * 转码[GBK -> ISO-8859-1] 不同的平台需要不同的转码
     * 
     * @param obj
     * @return
     */
    private String gbkToIso8859(Object obj) {
        try {
            if (obj == null)
                return "";
            else
                return new String(obj.toString().getBytes("GBK"), "iso-8859-1");
        } catch (Exception e) {
            return "";
        }
    }
 
    /** */
    /**
     * 连接到FTP服务器
     * 
     * @param hostname
     *            主机名
     * @param port
     *            端口
     * @param username
     *            用户名
     * @param password
     *            密码
     * @return 是否连接成功
     * @throws IOException
     */
    public boolean connect(String hostname, int port, String username,
            String password) throws IOException {
        ftp.connect(hostname, port);
        ftp.setControlEncoding("GBK");
        FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
        conf.setServerLanguageCode("zh");
        int reply = ftp.getReplyCode();
        if (FTPReply.isPositiveCompletion(reply)) {
            if (ftp.login(username, password)) {
                ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
                ftp.setControlEncoding("GBK");
                ftp.enterLocalPassiveMode();
                return true;
            }
        }
        disconnect();
        return false;
    }
 
    /** */
    /**
     * 断开与远程服务器的连接
     * 
     * @throws IOException
     */
    public void disconnect() throws IOException {
        if (ftp.isConnected()) {
            ftp.disconnect();
        }
    }
 
    public void setFtp(FTPClient ftp) {
        this.ftp = ftp;
    }
 
}

上传的方法没问题,下载那个有的一点小瑕疵,你可以试试

大神,这个怎么用啊?

你新建对象,调用uploadFile方法就可以了,传参名字写的很清楚,相信你能理解

求Java web FTP上传文件代码。
网上的例子也有不少,应该没那么困难,读读代码
求Java web FTP上传文件代码。
引用 3 楼 shixitong 的回复:

这个写的还可以,可以参考下
http://blog.csdn.net/hbcui1984/article/details/2720204

大神,能上传成功,可是是空的,而且一直没有返回值~

求Java web FTP上传文件代码。
引用 4 楼 duguqiubaibenr 的回复:
Quote: 引用 2 楼 qq_22926005 的回复:
Quote: 引用 1 楼 duguqiubaibenr 的回复:
  
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.regex.Matcher;
 
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
 
public class ClientFTP {
 
    public FTPClient ftp = null;
     
    public ClientFTP() {
        ftp = new FTPClient();
    }
 
    public boolean uploadFile(String serverpath, String file) {
        // 初始表示上传失败
        boolean success = false;
        // 创建FTPClient对象
        try {
            // 转到指定上传目录
            serverpath = gbkToIso8859(serverpath);
            if (!checkPathExist(iso8859ToGbk(serverpath)))
                return false;
            if (!ftp.changeWorkingDirectory(serverpath)) {
                if(!ftp.makeDirectory(serverpath)){
                    return false;
                }
            }
 
            // 输入流
            InputStream input = null;
            try {
                input = new FileInputStream((file));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            // 将上传文件存储到指定目录
            String path = serverpath + "\" + getFilename(file);
            if (!ftp.storeFile(path, input)) {
                return false;
            }
 
            // 关闭输入流
            input.close();
            // 退出ftp
 
            // 表示上传成功
            success = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                ftp.logout();
                disconnect();
            } catch (IOException ioe) {
            }
 
        }
        return success;
    }
     
    public boolean isConnected(){
        return ftp.isConnected();
    }
 
    /**
     * 从FTP服务器下载文件
     * 
     * @param ip
     *            FTP服务器ip e.g:192.168.8.22
     * @param port
     *            FTP服务器端口
     * @param username
     *            FTP登录账号
     * @param password
     *            FTP登录密码
     * @param serverpath
     *            FTP服务器上的相对路径 默认缺省时指向主目录
     * @param fileName
     *            要下载的文件名
     * @param localPath
     *            下载后保存到本地的路径 不含文件名
     * @return 成功返回true,否则返回false
     */
    public boolean downFile(String serverpath, String fileName, String localPath) { // 初始表示下载失败
        boolean success = false;
        // 创建FTPClient对象
        try {
 
            // 转到指定下载目录
            serverpath = gbkToIso8859(serverpath);
            ftp.changeWorkingDirectory(this.iso8859ToGbk(serverpath));
            // 列出该目录下所有文件
            FTPFile[] fs = ftp.listFiles();
            fileName = this.gbkToIso8859(fileName);
            localPath = this.gbkToIso8859(localPath);
 
            // 遍历所有文件,找到指定的文件
 
            for (int i =   0; i < fs.length; i++) {
                FTPFile f = fs[i];
 
                if (f.getName().equals(iso8859ToGbk(fileName))) {
                    // 根据绝对路径初始化文件
                    File localFile = new File(iso8859ToGbk(localPath)
                            + File.separator + f.getName());
                    File localFileDir = new File(iso8859ToGbk(localPath));
                    // 保存路径不存在时创建
                    if (!localFileDir.exists()) {
                        localFileDir.mkdirs();
                    }
                    // 输出流
                    OutputStream is = new FileOutputStream(localFile);
                    // 下载文件
                    ftp.retrieveFile(f.getName(), is);
                    is.close();
                }
            }
            // 下载成功
            success = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                ftp.logout();
                disconnect();
            } catch (IOException ioe) {
                ioe.printStackTrace();
            }
        }
        return success;
    }
 
    /**
     * 
     * 查找指定目录是否存在 不存在创建目录
     * 
     * @param FTPClient
     *            ftpClient 要检查的FTP服务器
     * @param String
     *            filePath 要查找的目录
     * @return boolean:存在:true,不存在:false
     * @throws IOException
     */
    public boolean checkPathExist(String filePath) throws IOException {
        boolean existFlag = false;
        try {
            if (filePath != null && !filePath.equals("")) {
                 File dir = new File(filePath);  
                    if (dir.exists()) {  
                        return true;  
                    }  
                    if (!filePath.endsWith(File.separator)) {  
                        filePath = filePath + File.separator;  
                    }  
                    //创建目录  
                    if (dir.mkdirs()) {  
                        existFlag = true;  
                    } 
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return existFlag;
    }
 
    /**
     * 根据绝对路径获得文件名
     * 
     * @param file
     *            文件绝对路径 e.g: e.g: E:/log/log.txt OR E:\log\log.txt
     * @return 转码后的文件名
     */
    private String getFilename(String file) {
        // 文件名
        String filename = "";
        if (file != null && !file.equals("")) {
            file = file.replaceAll(Matcher.quoteReplacement("\"), "/");
            String[] strs = file.split("/");
            filename = strs[strs.length -   1];
        }
        filename = gbkToIso8859(filename);// 转码
        return filename;
    }
 
    /**
     * 转码[ISO-8859-1 -> GBK] 不同的平台需要不同的转码
     * 
     * @param obj
     * @return
     */
    private String iso8859ToGbk(Object obj) {
        try {
            if (obj == null)
                return "";
            else {
                String str = new String(obj.toString().getBytes("iso-8859-1"),
                        "GBK");
                return str;
 
            }
        } catch (Exception e) {
            return "";
        }
    }
 
    /**
     * 转码[GBK -> ISO-8859-1] 不同的平台需要不同的转码
     * 
     * @param obj
     * @return
     */
    private String gbkToIso8859(Object obj) {
        try {
            if (obj == null)
                return "";
            else
                return new String(obj.toString().getBytes("GBK"), "iso-8859-1");
        } catch (Exception e) {
            return "";
        }
    }
 
    /** */
    /**
     * 连接到FTP服务器
     * 
     * @param hostname
     *            主机名
     * @param port
     *            端口
     * @param username
     *            用户名
     * @param password
     *            密码
     * @return 是否连接成功
     * @throws IOException
     */
    public boolean connect(String hostname, int port, String username,
            String password) throws IOException {
        ftp.connect(hostname, port);
        ftp.setControlEncoding("GBK");
        FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
        conf.setServerLanguageCode("zh");
        int reply = ftp.getReplyCode();
        if (FTPReply.isPositiveCompletion(reply)) {
            if (ftp.login(username, password)) {
                ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
                ftp.setControlEncoding("GBK");
                ftp.enterLocalPassiveMode();
                return true;
            }
        }
        disconnect();
        return false;
    }
 
    /** */
    /**
     * 断开与远程服务器的连接
     * 
     * @throws IOException
     */
    public void disconnect() throws IOException {
        if (ftp.isConnected()) {
            ftp.disconnect();
        }
    }
 
    public void setFtp(FTPClient ftp) {
        this.ftp = ftp;
    }
 
}

上传的方法没问题,下载那个有的一点小瑕疵,你可以试试

大神,这个怎么用啊?

你新建对象,调用uploadFile方法就可以了,传参名字写的很清楚,相信你能理解

我用3楼的可以上传,可是是空的,而且一直在运行~是什么问题?

求Java web FTP上传文件代码。
引用 3 楼 shixitong 的回复:

这个写的还可以,可以参考下
http://blog.csdn.net/hbcui1984/article/details/2720204

   上传成功,可是是空的~

求Java web FTP上传文件代码。
引用 6 楼 qq_22926005 的回复:
Quote: 引用 3 楼 shixitong 的回复:

这个写的还可以,可以参考下
http://blog.csdn.net/hbcui1984/article/details/2720204

大神,能上传成功,可是是空的,而且一直没有返回值~

上传文件用的ftp用户,要对接受上传文件的目录(该用户管理的目录)要有权限
比如我这边用的Ability Ftp Server
求Java web FTP上传文件代码。

求Java web FTP上传文件代码。
引用 9 楼 shixitong 的回复:
Quote: 引用 6 楼 qq_22926005 的回复:
Quote: 引用 3 楼 shixitong 的回复:

这个写的还可以,可以参考下
http://blog.csdn.net/hbcui1984/article/details/2720204

大神,能上传成功,可是是空的,而且一直没有返回值~

上传文件用的ftp用户,要对接受上传文件的目录(该用户管理的目录)要有权限
比如我这边用的Ability Ftp Server
求Java web FTP上传文件代码。

  
大神,我上传成功了,txt文本的没有问题,可是一到图片的就有问题,大小相同,就是打不开,帮看一下是不是代码错了~
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.regex.Matcher;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
 
public class ClientFTP {
 
/** 
 * Description: 向FTP服务器上传文件 
 * @Version1.0 Jul 27, 2008 4:31:09 PM by 崔红保(cuihongbao@d-heaven.com)创建 
 * @param url FTP服务器hostname 
 * @param port FTP服务器端口 
 * @param username FTP登录账号 
 * @param password FTP登录密码 
 * @param path FTP服务器保存目录 
 * @param filename 上传到FTP服务器上的文件名 
 * @param input 输入流 
 * @return 成功返回true,否则返回false 
 */  
public static boolean uploadFile(String url,int port,String username, String password, String path, String filename, InputStream input) {  
    boolean success = false;  
    FTPClient ftp = new FTPClient();  
    try {  
        int reply;  
        System.out.println(11);
        ftp.connect(url, port);//连接FTP服务器  
        //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器  
        ftp.login(username, password);//登录  
        reply = ftp.getReplyCode();  
        if (!FTPReply.isPositiveCompletion(reply)) {  
            ftp.disconnect();  
            return success;  
        }  
        System.out.println(22);
        ftp.changeWorkingDirectory(path);  
        System.out.println(33);
        ftp.enterLocalPassiveMode();
        System.out.println(44);
        ftp.storeFile(filename, input);   
       
        System.out.println(55);
        input.close();  
        ftp.logout();  
        success = true;  
    } catch (IOException e) {  
        e.printStackTrace();  
    } finally {  
        if (ftp.isConnected()) {  
            try {  
                ftp.disconnect();  
            } catch (IOException ioe) {  
            }  
        }  
    }  
    return success;  

public static void main(String[] args) {
try {  
               
        FileInputStream in=new FileInputStream(new File(“E://test.png”));  
        boolean flag = uploadFile(“127.0.0.1”, 21, “test”, “test”, “D:/ftp”, “test.png”, in);  
        System.out.println(flag);  
    } catch (FileNotFoundException e) {  
        e.printStackTrace();  
    }  
}
}

求Java web FTP上传文件代码。
100分
引用 10 楼 qq_22926005 的回复:
Quote: 引用 9 楼 shixitong 的回复:
Quote: 引用 6 楼 qq_22926005 的回复:
Quote: 引用 3 楼 shixitong 的回复:

这个写的还可以,可以参考下
http://blog.csdn.net/hbcui1984/article/details/2720204

大神,能上传成功,可是是空的,而且一直没有返回值~

上传文件用的ftp用户,要对接受上传文件的目录(该用户管理的目录)要有权限
比如我这边用的Ability Ftp Server
求Java web FTP上传文件代码。

  
大神,我上传成功了,txt文本的没有问题,可是一到图片的就有问题,大小相同,就是打不开,帮看一下是不是代码错了~
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.regex.Matcher;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
 
public class ClientFTP {
 
/** 
 * Description: 向FTP服务器上传文件 
 * @Version1.0 Jul 27, 2008 4:31:09 PM by 崔红保(cuihongbao@d-heaven.com)创建 
 * @param url FTP服务器hostname 
 * @param port FTP服务器端口 
 * @param username FTP登录账号 
 * @param password FTP登录密码 
 * @param path FTP服务器保存目录 
 * @param filename 上传到FTP服务器上的文件名 
 * @param input 输入流 
 * @return 成功返回true,否则返回false 
 */  
public static boolean uploadFile(String url,int port,String username, String password, String path, String filename, InputStream input) {  
    boolean success = false;  
    FTPClient ftp = new FTPClient();  
    try {  
        int reply;  
        System.out.println(11);
        ftp.connect(url, port);//连接FTP服务器  
        //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器  
        ftp.login(username, password);//登录  
        reply = ftp.getReplyCode();  
        if (!FTPReply.isPositiveCompletion(reply)) {  
            ftp.disconnect();  
            return success;  
        }  
        System.out.println(22);
        ftp.changeWorkingDirectory(path);  
        System.out.println(33);
        ftp.enterLocalPassiveMode();
        System.out.println(44);
        ftp.storeFile(filename, input);   
       
        System.out.println(55);
        input.close();  
        ftp.logout();  
        success = true;  
    } catch (IOException e) {  
        e.printStackTrace();  
    } finally {  
        if (ftp.isConnected()) {  
            try {  
                ftp.disconnect();  
            } catch (IOException ioe) {  
            }  
        }  
    }  
    return success;  

public static void main(String[] args) {
try {  
               
        FileInputStream in=new FileInputStream(new File(“E://test.png”));  
        boolean flag = uploadFile(“127.0.0.1”, 21, “test”, “test”, “D:/ftp”, “test.png”, in);  
        System.out.println(flag);  
    } catch (FileNotFoundException e) {  
        e.printStackTrace();  
    }  
}
}

ftp.connect(url, port);//连接FTP服务器
这句下面加一句
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);

求Java web FTP上传文件代码。
引用 11 楼 shixitong 的回复:
Quote: 引用 10 楼 qq_22926005 的回复:
Quote: 引用 9 楼 shixitong 的回复:
Quote: 引用 6 楼 qq_22926005 的回复:
Quote: 引用 3 楼 shixitong 的回复:

这个写的还可以,可以参考下
http://blog.csdn.net/hbcui1984/article/details/2720204

大神,能上传成功,可是是空的,而且一直没有返回值~

上传文件用的ftp用户,要对接受上传文件的目录(该用户管理的目录)要有权限
比如我这边用的Ability Ftp Server
求Java web FTP上传文件代码。

  
大神,我上传成功了,txt文本的没有问题,可是一到图片的就有问题,大小相同,就是打不开,帮看一下是不是代码错了~
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.regex.Matcher;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
 
public class ClientFTP {
 
/** 
 * Description: 向FTP服务器上传文件 
 * @Version1.0 Jul 27, 2008 4:31:09 PM by 崔红保(cuihongbao@d-heaven.com)创建 
 * @param url FTP服务器hostname 
 * @param port FTP服务器端口 
 * @param username FTP登录账号 
 * @param password FTP登录密码 
 * @param path FTP服务器保存目录 
 * @param filename 上传到FTP服务器上的文件名 
 * @param input 输入流 
 * @return 成功返回true,否则返回false 
 */  
public static boolean uploadFile(String url,int port,String username, String password, String path, String filename, InputStream input) {  
    boolean success = false;  
    FTPClient ftp = new FTPClient();  
    try {  
        int reply;  
        System.out.println(11);
        ftp.connect(url, port);//连接FTP服务器  
        //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器  
        ftp.login(username, password);//登录  
        reply = ftp.getReplyCode();  
        if (!FTPReply.isPositiveCompletion(reply)) {  
            ftp.disconnect();  
            return success;  
        }  
        System.out.println(22);
        ftp.changeWorkingDirectory(path);  
        System.out.println(33);
        ftp.enterLocalPassiveMode();
        System.out.println(44);
        ftp.storeFile(filename, input);   
       
        System.out.println(55);
        input.close();  
        ftp.logout();  
        success = true;  
    } catch (IOException e) {  
        e.printStackTrace();  
    } finally {  
        if (ftp.isConnected()) {  
            try {  
                ftp.disconnect();  
            } catch (IOException ioe) {  
            }  
        }  
    }  
    return success;  

public static void main(String[] args) {
try {  
               
        FileInputStream in=new FileInputStream(new File(“E://test.png”));  
        boolean flag = uploadFile(“127.0.0.1”, 21, “test”, “test”, “D:/ftp”, “test.png”, in);  
        System.out.println(flag);  
    } catch (FileNotFoundException e) {  
        e.printStackTrace();  
    }  
}
}

ftp.connect(url, port);//连接FTP服务器
这句下面加一句
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);

  加了,还是不行~

求Java web FTP上传文件代码。
package ftp;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.regex.Matcher;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

public class ClientFTP {

	/**
	 * Description: 向FTP服务器上传文件
	 * 
	 * @Version1.0 Jul 27, 2008 4:31:09 PM by 崔红保(cuihongbao@d-heaven.com)创建
	 * @param url
	 *            FTP服务器hostname
	 * @param port
	 *            FTP服务器端口
	 * @param username
	 *            FTP登录账号
	 * @param password
	 *            FTP登录密码
	 * @param path
	 *            FTP服务器保存目录
	 * @param filename
	 *            上传到FTP服务器上的文件名
	 * @param input
	 *            输入流
	 * @return 成功返回true,否则返回false
	 */
	public static boolean uploadFile(String url, int port, String username,
			String password, String path, String filename, InputStream input) {
		boolean success = false;
		FTPClient ftp = new FTPClient();
		try {
			int reply;
			System.out.println(11);
			ftp.connect(url, port);// 连接FTP服务器
			// 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
			ftp.login(username, password);// 登录
			reply = ftp.getReplyCode();
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftp.disconnect();
				return success;
			}
			System.out.println(22);
			ftp.changeWorkingDirectory(path);

			System.out.println(33);
			ftp.enterLocalPassiveMode();
			System.out.println(44);
			ftp.setFileType(FTPClient.BINARY_FILE_TYPE); 
			ftp.storeFile(filename, input);

			System.out.println(55);
			input.close();
			ftp.logout();
			success = true;
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (ftp.isConnected()) {
				try {
					ftp.disconnect();
				} catch (IOException ioe) {
				}
			}
		}
		return success;
	}

	public static void main(String[] args) {
		try {

			FileInputStream in = new FileInputStream(new File("E://test.png"));
			boolean flag = uploadFile("127.0.0.1", 21, "test", "test",
					"D:/ftp", "test.png", in);
			System.out.println(flag);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
}
求Java web FTP上传文件代码。
引用

ftp.connect(url, port);//连接FTP服务器
这句下面加一句
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);

这边我说错了,实际上应该是登录成功过后

求Java web FTP上传文件代码。
引用 14 楼 shixitong 的回复:
引用

ftp.connect(url, port);//连接FTP服务器
这句下面加一句
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);

这边我说错了,实际上应该是登录成功过后

谢谢  解决了  超级谢谢~!


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明求Java web FTP上传文件代码。
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!