FTP搭建

什么是FTP

ftp是文件传输协议,用于在网络上传输文件的协议,可以简单理解为ftp是一个服务器,我们可以把文件上传到ftp服务上,也可以从ftp上下载文件

在本机上搭建一个ftp服务(这里以win7系统为例)
  • 首先win+R,输入optionalfeatures


    image.png
  • 找到Internet信息服务,将FTP服务器和web管理工具选中,其子目录也要选中


    image.png
  • 然后点击确定,会看到IIS服务正在安装,让你等几分钟
    安装完之后,右键我的电脑,管理,左侧菜单最下边,服务和应用程序,展开,Internet信息服务


    image.png
  • 在“网站”文件夹右键添加ftp站点


    image.png
  • 添加站点名称和物理路径,物理路径自己随便新建个文件夹就行,下一步


    image.png
  • Ip地址选择自己电脑的ip,SSL选择允许,ftp服务的默认端口为21,下一步


    image.png
  • 身份验证选 “基本”,访问权限“所有用户”,可读可写


    image.png
  • 点击完成,你会在网站的文件夹下看到你刚刚新建的站点
验证一下我们搭建的ftp服务

打开浏览器,输入网址ftp://192.168.119.80,这个ip是你本机的ip

image.png

你可以在刚刚的物理路径下放一个文件,搭建成功

ftp搭建好之后,我们来用Java代码连接到ftp并上传一个文件

直接上代码:

FtpUtil ftpclient= new FtpUtil(ip,port,username,password);
                    try {
                        ftpclient.connectServer();
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        throw new AppException("登录FTP出错!");
                    }
                    try {
                        ftpclient.uploadFileByContent(fileName, data);
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        throw new AppException("上传文件失败!");
                    }

注意:这里上传的是具有txt文本内容的String类型的字符串data,而不是文本类型file,FtpUtil这个类中有各种方法,一看就能懂

附上FtpUtil.java代码

package com.neusoft.si.simis.local.treatment.payment;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

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

public class FtpUtil {
    private String ip = "";
    private String username = "";
    private String password = "";
    private int port = -1;
    private String path = "";
    FtpClient ftpClient = null;
    OutputStream os = null;
    FileInputStream is = null;

    public FtpUtil(String serverIP, String username, String password) {
        this.ip = serverIP;
        this.username = username;
        this.password = password;
    }

    
    
    public FtpUtil(String serverIP, int port, String username, String password) {
        this.ip = serverIP;
        this.username = username;
        this.password = password;
        this.port = port;
    }

    /**
     * ����ftp������
     * 
     * @throws IOException
     */
    public boolean connectServer() {
        ftpClient = new FtpClient();
        try {
            if (this.port != -1) {
                ftpClient.openServer(this.ip, this.port);
            } else {
                ftpClient.openServer(this.ip);
            }
            ftpClient.login(this.username, this.password);
            if (this.path.length() != 0) {
                ftpClient.cd(this.path);// path��ftp��������Ŀ¼����Ŀ¼
            }
            ftpClient.binary();// ��2�����ϴ�������
            System.out.println("�ѵ�¼��\"" + ftpClient.pwd() + "\"Ŀ¼");
            return true;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * �Ͽ���ftp����������
     * 
     * @throws IOException
     */
    public boolean closeServer() {
        try {
            if (is != null) {
                is.close();
            }
            if (os != null) {
                os.close();
            }
            if (ftpClient != null) {
                ftpClient.closeServer();
            }
            System.out.println("�Ѵӷ������Ͽ�");
            return true;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * ����ļ����ڵ�ǰĿ¼���Ƿ����
     * 
     * @param dir
     * @return
     */
    private boolean isDirExist(String dir) {
        String pwd = "";
        try {
            pwd = ftpClient.pwd();
            ftpClient.cd(dir);
            ftpClient.cd(pwd);
        } catch (Exception e) {
            return false;
        }
        return true;
    }

    /**
     * �ڵ�ǰĿ¼�´����ļ���
     * 
     * @param dir
     * @return
     * @throws Exception
     */
    private boolean createDir(String dir) {
        try {
            ftpClient.ascii();
            StringTokenizer s = new StringTokenizer(dir, "/"); // sign
            s.countTokens();
            String pathName = ftpClient.pwd();
            while (s.hasMoreElements()) {
                pathName = pathName + "/" + (String) s.nextElement();
                try {
                    ftpClient.sendServer("MKD " + pathName + "\r\n");
                } catch (Exception e) {
                    e = null;
                    return false;
                }
                ftpClient.readServerResponse();
            }
            ftpClient.binary();
            return true;
        } catch (IOException e1) {
            e1.printStackTrace();
            return false;
        }
    }

    /**
     * ftp�ϴ� �����������Ѵ�����Ϊfilename���ļ��У����ļ�������Ҫ�ϴ����ļ�����ͬ����ļ������滻
     * 
     * @param filename
     *            Ҫ�ϴ����ļ������ļ��У���
     * @return
     * @throws Exception
     */
    public boolean upload(String filename) {
        String newname = "";
        if (filename.indexOf("/") > -1) {
            newname = filename.substring(filename.lastIndexOf("/") + 1);
        } else {
            newname = filename;
        }
        return upload(filename, newname);
    }

    /**
     * ftp�ϴ� �����������Ѵ�����ΪnewName���ļ��У����ļ�������Ҫ�ϴ����ļ�����ͬ����ļ������滻
     * 
     * @param fileName
     *            Ҫ�ϴ����ļ������ļ��У���
     * @param newName
     *            ��������Ҫ��ɵ��ļ������ļ��У���
     * @return
     */
    public boolean upload(String fileName, String newName) {
        try {
            String savefilename = new String(fileName.getBytes("GBK"), "GBK");
            File file_in = new File(savefilename);// ���ش���ļ�
            if (!file_in.exists()) {
                throw new Exception("���ļ����ļ���[" + file_in.getName() + "]�������!");
            }
            if (file_in.isDirectory()) {
                upload(file_in.getPath(), newName, ftpClient.pwd());
            } else {
                uploadFile(file_in.getPath(), newName);
            }
            if (is != null) {
                is.close();
            }
            if (os != null) {
                os.close();
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            System.err.println("Exception e in Ftp upload(): " + e.toString());
            return false;
        } finally {
            try {
                if (is != null) {
                    is.close();
                }
                if (os != null) {
                    os.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * ���������ϴ��ķ���
     * 
     * @param fileName
     * @param newName
     * @param path
     * @throws Exception
     */
    private void upload(String fileName, String newName, String path)
            throws Exception {
        String savefilename = new String(fileName.getBytes("ISO-8859-1"), "GBK");
        File file_in = new File(savefilename);// ���ش���ļ�
        if (!file_in.exists()) {
            throw new Exception("���ļ����ļ���[" + file_in.getName() + "]�������!");
        }
        if (file_in.isDirectory()) {
            if (!isDirExist(newName)) {
                createDir(newName);
            }
            ftpClient.cd(newName);
            File sourceFile[] = file_in.listFiles();
            for (int i = 0; i < sourceFile.length; i++) {
                if (!sourceFile[i].exists()) {
                    continue;
                }
                if (sourceFile[i].isDirectory()) {
                    this.upload(sourceFile[i].getPath(), sourceFile[i]
                            .getName(), path + "/" + newName);
                } else {
                    this.uploadFile(sourceFile[i].getPath(), sourceFile[i]
                            .getName());
                }
            }
        } else {
            uploadFile(file_in.getPath(), newName);
        }
        ftpClient.cd(path);
    }

    /**
     * upload �ϴ��ļ�
     * 
     * @param filename
     *            Ҫ�ϴ����ļ���
     * @param newname
     *            �ϴ�������ļ���
     * @return -1 �ļ������� >=0 �ɹ��ϴ��������ļ��Ĵ�С
     * @throws Exception
     */
    public long uploadFile(String filename, String newname) throws Exception {
        long result = 0;
        TelnetOutputStream os = null;
        FileInputStream is = null;
        try {
            java.io.File file_in = new java.io.File(filename);
            if (!file_in.exists())
                return -1;
            os = ftpClient.put(newname);
            result = file_in.length();
            is = new FileInputStream(file_in);
            byte[] bytes = new byte[1024];
            int c;
            while ((c = is.read(bytes)) != -1) {
                os.write(bytes, 0, c);
            }
        } finally {
            if (is != null) {
                is.close();
            }
            if (os != null) {
                os.close();
            }
        }
        return result;
    }
    /**
     * upload �ϴ��ļ�
     * 
     * @param filename
     *            Ҫ�ϴ����ļ���
     * @param newname
     *            �ϴ�������ļ���
     * @return -1 �ļ������� >=0 �ɹ��ϴ��������ļ��Ĵ�С
     * @throws Exception
     */
    public long uploadFileByContent(String filename, String Content) throws Exception {
        long result = 0;
        TelnetOutputStream os = null;
        try {
            os = ftpClient.put(filename);
            result = Content.length();
            
            byte[] bytes = Content.getBytes();
            int c=bytes.length;
            os.write(bytes, 0,c );
        } finally {
            if (os != null) {
                os.close();
            }
        }
        return result;
    }
    

    /**
     * ��ftp�����ļ�������
     * 
     * @param filename
     *            �������ϵ��ļ���
     * @param newfilename
     *            ������ɵ��ļ���
     * @return
     * @throws Exception
     */
    public InputStream downloadFile(String filename) {
        long result = 0;
        TelnetInputStream is = null;
        FileOutputStream os = null;
        ByteArrayOutputStream swapStream = new ByteArrayOutputStream(); 
        InputStream downloadis = null;

        try {
            is = ftpClient.get(filename);
            
            //java.io.File outfile = new java.io.File(newfilename);
            //os = new FileOutputStream(outfile);
            byte[] bytes = new byte[1024];
            int c;
            while ((c = is.read(bytes)) != -1) {
                swapStream.write(bytes, 0, c);
                //result = result + c;
            }
            byte[] swapByteArray = swapStream.toByteArray(); 
            downloadis= new ByteArrayInputStream(swapByteArray); 
         
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (is != null) {
                    is.close();
                }
                if (os != null) {
                    os.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return downloadis;
    }

    /**
     * ȡ������ڵ�ǰ����Ŀ¼��ij��Ŀ¼�������ļ��б�
     * 
     * @param path
     * @return
     */
    public List getFileList(String path) {
        List list = new ArrayList();
        DataInputStream dis;
        try {
            dis = new DataInputStream(ftpClient.nameList(this.path + path));
            String filename = "";
            while ((filename = dis.readLine()) != null) {
                list.add(filename);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return list;
    }
    /**
     * 
     * 

ɾ��ftp�ϵ��ļ�

* @author newname 2012-12-26 * @param srcFname * @return true || false */ public boolean removeFile(String filename) throws Exception { boolean flag = false; if( ftpClient!=null ){ try { // ftpClient.cd(url); ftpClient.sendServer("DELE "+filename+"\r\n"); int status=ftpClient.readServerResponse(); if(status==250 || status==226){ flag=true; } } catch (Exception e) { e.printStackTrace(); System.err.println("Exception e in Ftp upload(): " + e.toString()); return flag; } finally { try { if (is != null) { is.close(); } if (os != null) { os.close(); } } catch (IOException e) { e.printStackTrace(); return flag; } } } return flag; } public static void main(String[] args) { FtpUtil ftp = new FtpUtil("192.168.11.11", "111", "1111"); ftp.connectServer(); boolean result = ftp.upload( "C:/Documents and Settings/ipanel/����/java/Hibernate_HQL.docx", "amuse/audioTest/music/Hibernate_HQL.docx"); System.out.println(result ? "�ϴ��ɹ���" : "�ϴ�ʧ�ܣ�"); ftp.closeServer(); /** * FTPԶ�������б� USER PORT RETR ALLO DELE SITE XMKD CDUP FEAT PASS PASV STOR * REST CWD STAT RMD XCUP OPTS ACCT TYPE APPE RNFR XCWD HELP XRMD STOU * AUTH REIN STRU SMNT RNTO LIST NOOP PWD SIZE PBSZ QUIT MODE SYST ABOR * NLST MKD XPWD MDTM PROT * �ڷ�������ִ������,�����sendServer��ִ��Զ������(����ִ�б���FTP����)�Ļ�������FTP���Ҫ����\r\n * ftpclient.sendServer("XMKD /test/bb\r\n"); //ִ�з������ϵ�FTP���� * ftpclient.readServerResponseһ��Ҫ��sendServer����� * nameList("/test")��ȡָĿ¼�µ��ļ��б� XMKD����Ŀ¼����Ŀ¼���ڵ�������ٴδ���Ŀ¼ʱ���� XRMDɾ��Ŀ¼ * DELEɾ���ļ� */ } /*��˰�ӿڴ��*/ }

你可能感兴趣的:(FTP搭建)