Java实现FTP服务器功能实例代码

FTP(File Transfer Protocol 文件传输协议)是Internet 上用来传送文件的协议。在Internet上通过FTP 服务器可以进行文件的上传(Upload)或下载(Download)。FTP是实时联机服务,在使用它之前必须是具有该服务的一个用户(用户名和口令),工作时客户端必须先登录到作为服务器一方的计算机上,用户登录后可以进行文件搜索和文件传送等有关操作,如改变当前工作目录、列文件目录、设置传输参数及传送文件等。使用FTP可以传送所有类型的文件,如文本文件、二进制可执行文件、图象文件、声音文件和数据压缩文件等。

FTP 命令

  FTP 的主要操作都是基于各种命令基础之上的。常用的命令有:
   设置传输模式,它包括ASCⅡ(文本) 和BINARY 二进制模式;
   目录操作,改变或显示远程计算机的当前目录(cd、dir/ls 命令);
   连接操作,open命令用于建立同远程计算机的连接;close命令用于关闭连接;
   发送操作,put命令用于传送文件到远程计算机;mput 命令用于传送多个文件到远程计算机;
   获取操作,get命令用于接收一个文件;mget命令用于接收多个文件。

import java.net.Socket;
import org.apache.log4j.Logger;
/**
 * 角色——服务器A
 * @author Leon
 *
 */
public class ServerA{
  public static void main(String[] args){
    final String F_DIR = "c:/test";//根路径
    final int PORT = 22;//监听端口号
    Logger.getRootLogger();
    Logger logger = Logger.getLogger("com");
    try{
      ServerSocket s = new ServerSocket(PORT);
      logger.info("Connecting to server A...");
      logger.info("Connected Successful! Local Port:"+s.getLocalPort()+". Default Directory:'"+F_DIR+"'.");
      while( true ){
        //接受客户端请求
        Socket client = s.accept();
        //创建服务线程
        new ClientThread(client, F_DIR).start();
      }
    } catch(Exception e) {
      logger.error(e.getMessage());
      for(StackTraceElement ste : e.getStackTrace()){
        logger.error(ste.toString());
      }
    }
  }
}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.net.ConnectException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.nio.charset.Charset;
import java.util.Random;
import org.apache.log4j.Logger;
/**
 * 客户端子线程类
 * @author Leon
 *
 */
public class ClientThread extends Thread {
  private Socket socketClient;//客户端socket
  private Logger logger;//日志对象
  private String dir;//绝对路径
  private String pdir = "/";//相对路径
  private final static Random generator = new Random();//随机数
  public ClientThread(Socket client, String F_DIR){
    this.socketClient = client;
    this.dir = F_DIR;
  }
  @Override
  public void run() {
    Logger.getRootLogger();
    logger = Logger.getLogger("com");
    InputStream is = null;
    OutputStream os = null;
    try {
      is = socketClient.getInputStream();
      os = socketClient.getOutputStream();
    } catch (IOException e) {
      logger.error(e.getMessage());
      for(StackTraceElement ste : e.getStackTrace()){
        logger.error(ste.toString());
      }
    }
    BufferedReader br = new BufferedReader(new InputStreamReader(is,
        Charset.forName("UTF-8")));
    PrintWriter pw = new PrintWriter(os);
    String clientIp = socketClient.getInetAddress().toString().substring(1);//记录客户端IP
    String username = "not logged in";//用户名
    String password = "";//口令
    String command = "";//命令
    boolean loginStuts = false;//登录状态
    final String LOGIN_WARNING = "530 Please log in with USER and PASS first.";
    String str = "";//命令内容字符串
    int port_high = 0;
    int port_low = 0;
    String retr_ip = "";//接收文件的IP地址
    Socket tempsocket = null;
    //打印欢迎信息
    pw.println("220-FTP Server A version 1.0 written by Leon Guo");
    pw.flush();
    logger.info("("+username+") ("+clientIp+")> Connected, sending welcome message...");
    logger.info("("+username+") ("+clientIp+")> 220-FTP Server A version 1.0 written by Leon Guo");
    boolean b = true;
    while ( b ){
      try {
        //获取用户输入的命令
        command = br.readLine();
        if(null == command) break;
      } catch (IOException e) {
        pw.println("331 Failed to get command");
        pw.flush();
        logger.info("("+username+") ("+clientIp+")> 331 Failed to get command");
        logger.error(e.getMessage());
        for(StackTraceElement ste : e.getStackTrace()){
          logger.error(ste.toString());
        }
        b = false;
      }
      /*
       * 访问控制命令
       */
      // USER命令
      if(command.toUpperCase().startsWith("USER")){
        logger.info("(not logged in) ("+clientIp+")> "+command);
        username = command.substring(4).trim();
        if("".equals(username)){
          pw.println("501 Syntax error");
          pw.flush();
          logger.info("(not logged in) ("+clientIp+")> 501 Syntax error");
          username = "not logged in";
        }
        else{
          pw.println("331 Password required for " + username);
          pw.flush();
          logger.info("(not logged in) ("+clientIp+")> 331 Password required for " + username);
        }
        loginStuts = false;
      } //end USER
      // PASS命令
      else if(command.toUpperCase().startsWith("PASS")){
        logger.info("(not logged in) ("+clientIp+")> "+command);
        password = command.substring(4).trim();
        if(username.equals("root") && password.equals("root")){
          pw.println("230 Logged on");
          pw.flush();
          logger.info("("+username+") ("+clientIp+")> 230 Logged on");
//         logger.info("客户端 "+clientIp+" 通过 "+username+"用户登录");
          loginStuts = true;
        }
        else{
          pw.println("530 Login or password incorrect!");
          pw.flush();
          logger.info("(not logged in) ("+clientIp+")> 530 Login or password incorrect!");
          username = "not logged in";
        }
      } //end PASS
      // PWD命令
      else if(command.toUpperCase().startsWith("PWD")){
        logger.info("("+username+") ("+clientIp+")> "+command);
        if(loginStuts){
//         logger.info("用户"+clientIp+":"+username+"执行PWD命令");
          pw.println("257 /""+pdir+"/" is current directory");
          pw.flush();
          logger.info("("+username+") ("+clientIp+")> 257 /""+pdir+"/" is current directory");
        }
        else{
          pw.println(LOGIN_WARNING);
          pw.flush();
          logger.info("("+username+") ("+clientIp+")> "+LOGIN_WARNING);
        }
      } //end PWD
      // CWD命令
      else if(command.toUpperCase().startsWith("CWD")){
        logger.info("("+username+") ("+clientIp+")> "+command);
        if(loginStuts){
          str = command.substring(3).trim();
          if("".equals(str)){
            pw.println("250 Broken client detected, missing argument to CWD. /""+pdir+"/" is current directory.");
            pw.flush();
            logger.info("("+username+") ("+clientIp+")> 250 Broken client detected, missing argument to CWD. /""+pdir+"/" is current directory.");
          }
          else{
            //判断目录是否存在
            String tmpDir = dir + "/" + str;
            File file = new File(tmpDir);
            if(file.exists()){//目录存在
              dir = dir + "/" + str;
              if("/".equals(pdir)){
                pdir = pdir + str;
              }
              else{
                pdir = pdir + "/" + str;
              }
//             logger.info("用户"+clientIp+":"+username+"执行CWD命令");
              pw.println("250 CWD successful. /""+pdir+"/" is current directory");
              pw.flush();
              logger.info("("+username+") ("+clientIp+")> 250 CWD successful. /""+pdir+"/" is current directory");
            }
            else{//目录不存在
              pw.println("550 CWD failed. /""+pdir+"/": directory not found.");
              pw.flush();
              logger.info("("+username+") ("+clientIp+")> 550 CWD failed. /""+pdir+"/": directory not found.");
            }
          }
        }
        else{
          pw.println(LOGIN_WARNING);
          pw.flush();
          logger.info("("+username+") ("+clientIp+")> "+LOGIN_WARNING);
        }
      } //end CWD
      // QUIT命令
      else if(command.toUpperCase().startsWith("QUIT")){
        logger.info("("+username+") ("+clientIp+")> "+command);
        b = false;
        pw.println("221 Goodbye");
        pw.flush();
        logger.info("("+username+") ("+clientIp+")> 221 Goodbye");
        try {
          Thread.currentThread();
          Thread.sleep(1000);
        } catch (InterruptedException e) {
          logger.error(e.getMessage());
          for(StackTraceElement ste : e.getStackTrace()){
            logger.error(ste.toString());
          }
        }
      } //end QUIT
      /*
       * 传输参数命令
       */
      //PORT命令,主动模式传输数据
      else if(command.toUpperCase().startsWith("PORT")){
        logger.info("("+username+") ("+clientIp+")> "+command);
        if(loginStuts){
          try {
            str = command.substring(4).trim();
            port_low = Integer.parseInt(str.substring(str.lastIndexOf(",")+1));
            port_high = Integer.parseInt(str.substring(0, str.lastIndexOf(","))
                .substring(str.substring(0, str.lastIndexOf(",")).lastIndexOf(",")+1));
            String str1 = str.substring(0, str.substring(0, str.lastIndexOf(",")).lastIndexOf(","));
            retr_ip = str1.replace(",", ".");
            try {
              //实例化主动模式下的socket
              tempsocket = new Socket(retr_ip,port_high * 256 + port_low);
//             logger.info("用户"+clientIp+":"+username+"执行PORT命令");
              pw.println("200 port command successful");
              pw.flush();
              logger.info("("+username+") ("+clientIp+")> 200 port command successful");
            } catch (ConnectException ce) {
              pw.println("425 Can't open data connection.");
              pw.flush();
              logger.info("("+username+") ("+clientIp+")> 425 Can't open data connection.");
              logger.error(ce.getMessage());
              for(StackTraceElement ste : ce.getStackTrace()){
                logger.error(ste.toString());
              }
            } catch (UnknownHostException e) {
              logger.error(e.getMessage());
              for(StackTraceElement ste : e.getStackTrace()){
                logger.error(ste.toString());
              }
            } catch (IOException e) {
              logger.error(e.getMessage());
              for(StackTraceElement ste : e.getStackTrace()){
                logger.error(ste.toString());
              }
            }
          } catch (NumberFormatException e) {
            pw.println("503 Bad sequence of commands.");
            pw.flush();
            logger.info("("+username+") ("+clientIp+")> 503 Bad sequence of commands.");
            logger.error(e.getMessage());
            for(StackTraceElement ste : e.getStackTrace()){
              logger.error(ste.toString());
            }
          }
        }
        else{
          pw.println(LOGIN_WARNING);
          pw.flush();
          logger.info("("+username+") ("+clientIp+")> "+LOGIN_WARNING);
        }
      } //end PORT
      //PASV命令,被动模式传输数据
      else if(command.toUpperCase().startsWith("PASV")) {
        logger.info("("+username+") ("+clientIp+")> "+command);
        if(loginStuts){
          ServerSocket ss = null;
          while( true ){
            //获取服务器空闲端口
            port_high = 1 + generator.nextInt(20);
            port_low = 100 + generator.nextInt(1000);
            try {
              //服务器绑定端口
              ss = new ServerSocket(port_high * 256 + port_low);
              break;
            } catch (IOException e) {
              continue;
            }
          }
//         logger.info("用户"+clientIp+":"+username+"执行PASV命令");
          InetAddress i = null;
          try {
            i = InetAddress.getLocalHost();
          } catch (UnknownHostException e1) {
            e1.printStackTrace();
          }
          pw.println("227 Entering Passive Mode ("+i.getHostAddress().replace(".", ",")+","+port_high+","+port_low+")");
          pw.flush();
          logger.info("("+username+") ("+clientIp+")> 227 Entering Passive Mode ("+i.getHostAddress().replace(".", ",")+","+port_high+","+port_low+")");
          try {
            //被动模式下的socket
            tempsocket = ss.accept();
            ss.close();
          } catch (IOException e) {
            logger.error(e.getMessage());
            for(StackTraceElement ste : e.getStackTrace()){
              logger.error(ste.toString());
            }
          }
        }
        else{
          pw.println(LOGIN_WARNING);
          pw.flush();
          logger.info("("+username+") ("+clientIp+")> "+LOGIN_WARNING);
        }
      } //end PASV
      //RETR命令
      else if(command.toUpperCase().startsWith("RETR")){
        logger.info("("+username+") ("+clientIp+")> "+command);
        if(loginStuts){
          str = command.substring(4).trim();
          if("".equals(str)){
            pw.println("501 Syntax error");
            pw.flush();
            logger.info("("+username+") ("+clientIp+")> 501 Syntax error");
          }
          else {
            try {
              pw.println("150 Opening data channel for file transfer.");
              pw.flush();
              logger.info("("+username+") ("+clientIp+")> 150 Opening data channel for file transfer.");
              RandomAccessFile outfile = null;
              OutputStream outsocket = null;
              try {
                //创建从中读取和向其中写入(可选)的随机访问文件流,该文件具有指定名称
                outfile = new RandomAccessFile(dir+"/"+str,"r");
                outsocket = tempsocket.getOutputStream();
              } catch (FileNotFoundException e) {
                logger.error(e.getMessage());
                for(StackTraceElement ste : e.getStackTrace()){
                  logger.error(ste.toString());
                }
              } catch (IOException e) {
                logger.error(e.getMessage());
                for(StackTraceElement ste : e.getStackTrace()){
                  logger.error(ste.toString());
                }
              }
              byte bytebuffer[]= new byte[1024];
              int length;
              try{
                while((length = outfile.read(bytebuffer)) != -1){
                  outsocket.write(bytebuffer, 0, length);
                }
                outsocket.close();
                outfile.close();
                tempsocket.close();
              }
              catch(IOException e){
                logger.error(e.getMessage());
                for(StackTraceElement ste : e.getStackTrace()){
                  logger.error(ste.toString());
                }
              }
//             logger.info("用户"+clientIp+":"+username+"执行RETR命令");
              pw.println("226 Transfer OK");
              pw.flush();
              logger.info("("+username+") ("+clientIp+")> 226 Transfer OK");
            } catch (Exception e){
              pw.println("503 Bad sequence of commands.");
              pw.flush();
              logger.info("("+username+") ("+clientIp+")> 503 Bad sequence of commands.");
              logger.error(e.getMessage());
              for(StackTraceElement ste : e.getStackTrace()){
                logger.error(ste.toString());
              }
            }
          }
        }
        else{
          pw.println(LOGIN_WARNING);
          pw.flush();
          logger.info("("+username+") ("+clientIp+")> "+LOGIN_WARNING);
        }
      }//end RETR
      //STOR命令
      else if(command.toUpperCase().startsWith("STOR")){
        logger.info("("+username+") ("+clientIp+")> "+command);
        if(loginStuts){
          str = command.substring(4).trim();
          if("".equals(str)){
            pw.println("501 Syntax error");
            pw.flush();
            logger.info("("+username+") ("+clientIp+")> 501 Syntax error");
          }
          else {
            try {
              pw.println("150 Opening data channel for file transfer.");
              pw.flush();
              logger.info("("+username+") ("+clientIp+")> 150 Opening data channel for file transfer.");
              RandomAccessFile infile = null;
              InputStream insocket = null;
              try {
                infile = new RandomAccessFile(dir+"/"+str,"rw");
                insocket = tempsocket.getInputStream();
              } catch (FileNotFoundException e) {
                logger.error(e.getMessage());
                for(StackTraceElement ste : e.getStackTrace()){
                  logger.error(ste.toString());
                }
              } catch (IOException e) {
                logger.error(e.getMessage());
                for(StackTraceElement ste : e.getStackTrace()){
                  logger.error(ste.toString());
                }
              }
              byte bytebuffer[] = new byte[1024];
              int length;
              try{
                while((length =insocket.read(bytebuffer) )!= -1){
                  infile.write(bytebuffer, 0, length);
                }
                insocket.close();
                infile.close();
                tempsocket.close();
              }
              catch(IOException e){
                logger.error(e.getMessage());
                for(StackTraceElement ste : e.getStackTrace()){
                  logger.error(ste.toString());
                }
              }
//             logger.info("用户"+clientIp+":"+username+"执行STOR命令");
              pw.println("226 Transfer OK");
              pw.flush();
              logger.info("("+username+") ("+clientIp+")> 226 Transfer OK");
            } catch (Exception e){
              pw.println("503 Bad sequence of commands.");
              pw.flush();
              logger.info("("+username+") ("+clientIp+")> 503 Bad sequence of commands.");
              logger.error(e.getMessage());
              for(StackTraceElement ste : e.getStackTrace()){
                logger.error(ste.toString());
              }
            }
          }
        } else {
          pw.println(LOGIN_WARNING);
          pw.flush();
          logger.info("("+username+") ("+clientIp+")> "+LOGIN_WARNING);
        }
      } //end STOR
      //NLST命令
      else if(command.toUpperCase().startsWith("NLST")) {
        logger.info("("+username+") ("+clientIp+")> "+command);
        if(loginStuts){
          try {
            pw.println("150 Opening data channel for directory list.");
            pw.flush();
            logger.info("("+username+") ("+clientIp+")> 150 Opening data channel for directory list.");
            PrintWriter pwr = null;
            try {
              pwr= new PrintWriter(tempsocket.getOutputStream(),true);
            } catch (IOException e1) {
              e1.printStackTrace();
            }
            File file = new File(dir);
            String[] dirstructure = new String[10];
            dirstructure= file.list();
            for(int i=0;i<dirstructure.length;i++){
              pwr.println(dirstructure[i]);
            }
            try {
              tempsocket.close();
              pwr.close();
            } catch (IOException e) {
              logger.error(e.getMessage());
              for(StackTraceElement ste : e.getStackTrace()){
                logger.error(ste.toString());
              }
            }
//           logger.info("用户"+clientIp+":"+username+"执行NLST命令");
            pw.println("226 Transfer OK");
            pw.flush();
            logger.info("("+username+") ("+clientIp+")> 226 Transfer OK");
          } catch (Exception e){
            pw.println("503 Bad sequence of commands.");
            pw.flush();
            logger.info("("+username+") ("+clientIp+")> 503 Bad sequence of commands.");
            logger.error(e.getMessage());
            for(StackTraceElement ste : e.getStackTrace()){
              logger.error(ste.toString());
            }
          }
        }else{
          pw.println(LOGIN_WARNING);
          pw.flush();
          logger.info("("+username+") ("+clientIp+")> "+LOGIN_WARNING);
        }
      } //end NLST
      //LIST命令
      else if(command.toUpperCase().startsWith("LIST")) {
        logger.info("("+username+") ("+clientIp+")> "+command);
        if(loginStuts){
          try{
            pw.println("150 Opening data channel for directory list.");
            pw.flush();
            logger.info("("+username+") ("+clientIp+")> 150 Opening data channel for directory list.");
            PrintWriter pwr = null;
            try {
              pwr= new PrintWriter(tempsocket.getOutputStream(),true);
            } catch (IOException e) {
              logger.error(e.getMessage());
              for(StackTraceElement ste : e.getStackTrace()){
                logger.error(ste.toString());
              }
            }
            FtpUtil.getDetailList(pwr, dir);
            try {
              tempsocket.close();
              pwr.close();
            } catch (IOException e) {
              logger.error(e.getMessage());
              for(StackTraceElement ste : e.getStackTrace()){
                logger.error(ste.toString());
              }
            }
//           logger.info("用户"+clientIp+":"+username+"执行LIST命令");
            pw.println("226 Transfer OK");
            pw.flush();
            logger.info("("+username+") ("+clientIp+")> 226 Transfer OK");
          } catch (Exception e){
            pw.println("503 Bad sequence of commands.");
            pw.flush();
            logger.info("("+username+") ("+clientIp+")> 503 Bad sequence of commands.");
            logger.error(e.getMessage());
            for(StackTraceElement ste : e.getStackTrace()){
              logger.error(ste.toString());
            }
          }
        } else {
          pw.println(LOGIN_WARNING);
          pw.flush();
          logger.info("("+username+") ("+clientIp+")> "+LOGIN_WARNING);
        }
      } //end LIST
      // 输入非法命令
      else{
        logger.info("("+username+") ("+clientIp+")> "+command);
        pw.println("500 Syntax error, command unrecognized.");
        pw.flush();
        logger.info("("+username+") ("+clientIp+")> 500 Syntax error, command unrecognized.");
      }
    } //end while
    try {
      logger.info("("+username+") ("+clientIp+")> disconnected.");
//     logger.info("用户"+clientIp+":"+username+"退出");
      br.close();
      socketClient.close();
      pw.close();
      if(null != tempsocket){
        tempsocket.close();
      }
    } catch (IOException e) {
      logger.error(e.getMessage());
      for(StackTraceElement ste : e.getStackTrace()){
        logger.error(ste.toString());
      }
    }
  }
}
import java.io.File;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * FTP工具类
 * @author Leon
 *
 */
public class FtpUtil {
  public static void getDetailList(PrintWriter pw, String path){
    File dir = new File(path);
    if (!dir.isDirectory()) {
      pw.println("500 No such file or directory./r/n");
    }
    File[] files = dir.listFiles();
    String modifyDate;
    for (int i = 0; i < files.length; i++) {
      modifyDate = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss")
          .format(new Date(files[i].lastModified()));
      if (files[i].isDirectory()) {
        pw.println("drwxr-xr-x ftp   ftp      0 "
            + modifyDate + " " + files[i].getName());
      } else {
        pw.println("-rw-r-r--1 ftp   ftp      "
            + files[i].length() + " " + modifyDate + " "
            + files[i].getName());
      }
      pw.flush();
    }
    pw.println("total:" + files.length);
  }
}
### set log levels ###
log4j.logger.com =debug,stdout,D,E
### 输出到控制台 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n
## 输出DEBUG级别以上的日志
log4j.appender.D=org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File=c:/logs/logs.log
log4j.appender.D.Append =true
## 输出DEBUG级别以上的日志
log4j.appender.D.Threshold=DEBUG
log4j.appender.D.layout=org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 保存异常信息到单独文件 ###
log4j.appender.E=org.apache.log4j.DailyRollingFileAppender
## 异常日志文件名
log4j.appender.E.File=c:/logs/errors.log
log4j.appender.E.Append=true
## 只输出ERROR级别以上的日志!!!
log4j.appender.E.Threshold=ERROR
log4j.appender.E.layout=org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n 

以上内容是小编给大家介绍的Java实现FTP服务器功能实例代码的相关知识,希望大家喜欢。

时间: 2015-12-17

java操作ftp下载文件示例

复制代码 代码如下: /**     *      * JAVA操作 FTP 下载     * 文件下载.     *     */    private void ftpDownload()    {        FTPClient ftpClient = null;        InputStream input = null;        boolean loginFlag = false;        List<String> list = new ArrayList<S

Java通过FTP服务器上传下载文件的方法

对于使用文件进行交换数据的应用来说,使用FTP 服务器是一个很不错的解决方案. 关于FileZilla Server服务器的详细搭建配置过程,详情请见FileZilla Server安装配置教程.之前有朋友说,上传大文件(几百M以上的文件)到FTP服务器时会重现无法重命名的问题,但本人亲测上传2G的文件到FileZilla Server都没有该问题,朋友们可以放心使用该代码. FavFTPUtil.Java package com.favccxx.favsoft.util; import jav

JAVA中使用FTPClient实现文件上传下载实例代码

在java程序开发中,ftp用的比较多,经常打交道,比如说向FTP服务器上传文件.下载文件,本文给大家介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件. 一.上传文件 原理就不介绍了,大家直接看代码吧 /** * Description: 向FTP服务器上传文件 * @Version1.0 Jul 27, 2008 4:31:09 PM by 崔红保(cuihongbao@d-heaven.com)创建 * @param url F

Java FtpClient 实现文件上传服务

一.Ubuntu 安装 Vsftpd 服务 1.安装 sudo apt-get install vsftpd 2.添加用户(uftp) sudo useradd -d /home/uftp -s /bin/bash uftp 3.设置用户密码 sudo useradd -d /home/uftp -s /bin/bash uftp 4.创建用户目录 sudo mkdir /home/uftp 5.设置用户密码 sudo passwd uftp 6.设置/etc/vsftpd.conf配置文件 s

JAVA技术实现上传下载文件到FTP服务器(完整)

具体详细介绍请看下文: 在使用文件进行交互数据的应用来说,使用FTP服务器是一个很好的选择.本文使用Apache Jakarta Commons Net(commons-net-3.3.jar) 基于FileZilla Server服务器实现FTP服务器上文件的上传/下载/删除等操作. 关于FileZilla Server服务器的详细搭建配置过程,详情请见 FileZilla Server安装配置教程 .之前有朋友说,上传大文件(几百M以上的文件)到FTP服务器时会重现无法重命名的问题,但本人亲

Java中FTPClient上传中文目录、中文文件名乱码问题解决方法

问题描述: 使用org.apache.commons.net.ftp.FTPClient创建中文目录.上传中文文件名时,目录名及文件名中的中文显示为"??". 原因: FTP协议里面,规定文件名编码为iso-8859-1,所以目录名或文件名需要转码. 解决方案: 1.将中文的目录或文件名转为iso-8859-1编码的字符.参考代码: 复制代码 代码如下: String name="目录名或文件名"; name=new String(name.getBytes(&qu

Java使用FTPClient类读写FTP

本文实例为大家分享了Java使用FTPClient类读写FTP的具体代码,供大家参考,具体内容如下 1.首先先导入相关jar包 2.创建一个连接FTP的工具类FTPUtil.java package com.metarnet.ftp.util; import java.io.IOException; import java.io.InputStream; import java.net.SocketException; import java.util.Properties; import or

Java语言实现简单FTP软件 FTP上传下载管理模块实现(11)

本文为大家分享了FTP上传下载管理模块的实现方法,供大家参考,具体内容如下 1.上传本地文件或文件夹到远程FTP服务器端的功能. 当用户在本地文件列表中选择想要上传的文件后,点击上传按钮,将本机上指定的文件上传到FTP服务器当前展现的目录,下图为上传子模块流程图 选择好要上传的文件或文件夹,点击"上传"按钮,会触发com.oyp.ftp.panel.local.UploadAction类的actionPerformed(ActionEvent e)方法,其主要代码如下 /** * 上传

Java FTPClient实现文件上传下载

在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件. 所用到的jar包有:  commons-net-1.4.1.jar  jakarta-oro.jar  一.上传文件 文件上传源代码 /** * Description: 向FTP服务器上传文件 * @Version1.0 * @param url FTP服务器hostname * @param

java使用ftp上传文件示例分享

复制代码 代码如下: import java.io.ByteArrayInputStream;  import java.io.FileOutputStream;  import java.io.IOException;  import java.net.SocketException;  import java.text.SimpleDateFormat;  import java.util.Date; import org.apache.commons.io.IOUtils;  import

PHP实现ftp上传文件示例

FTP上传是PHP实现的一个常见且非常重要的应用技巧,今天就来与大家分享一下PHP实现FTP上传文件的简单示例.希望对大家的PHP学习能带来一定的帮助. 主要代码如下: function make_directory($ftp_stream, $dir){ // if directory already exists or can be immediately created return true if ($this->ftp_is_dir($ftp_stream, $dir) || @ftp

java实现ftp上传 如何创建文件夹

java如何实现ftp上传?如何创建文件夹? 最佳答案: 准备条件:java实现ftp上传用到了commons-net-3.3.jar包 首先建立ftphost连接 public boolean connect(String path, String addr, int port, String username, String password) { try { //FTPClient ftp = new FTPHTTPClient(addr, port, username, password

Java实现ftp上传下载、删除文件及在ftp服务器上传文件夹的方法

一个JAVA 实现FTP功能的代码,包括了服务器的设置模块,并包括有上传文件至FTP的通用方法.下载文件的通用方法以及删除文件.在ftp服务器上传文件夹.检测文件夹是否存在等,里面的有些代码对编写JAVA文件上传或许有参考价值,Java FTP主文件代码: package ftpDemo; import java.io.DataOutputStream; import java.io.InputStream; import java.io.OutputStream; import sun.net

jquery uploadify和apache Fileupload实现异步上传文件示例

jQuery Uploadify + Apache Fileupload异步上传文件示例1.可以限制上传文件大小和类型,理论上任何类型的文件都可以上传(自己根据api配置即可):2.后台使用Apache commons-fileupload-1.3.1.jar作为上传工具包,本示例支持一次性多文件上传:3.文件上传目录可以任意指定,请在web.xml中配置:Uploadify api 详见http://www.uploadify.com/documentation/ FileUploadServ

Python实现FTP上传文件或文件夹实例(递归)

本文实例讲述了Python实现FTP上传文件或文件夹实例.分享给大家供大家参考.具体如下: import sys import os import json from ftplib import FTP _XFER_FILE = 'FILE' _XFER_DIR = 'DIR' class Xfer(object): ''''' @note: upload local file or dirs recursively to ftp server ''' def __init__(self): s

批处理FTP上传文件

背景:本机一个文件"A.TXT"在C盘根目录下,需要上传到FTP服务器"192.168.0.1"的"X"目录下面 复制代码 代码如下: @echo off set ftpfile=putfiles.ftp set logfile=putfiles.log echo open 192.168.0.1 > "%ftpfile%" rem 把下面行中的 username和password改为你的用户名和密码 echo user

Java使用SFTP上传文件到服务器的简单使用

最近用到SFTP上传文件查找了一些资料后自己做了一点总结,方便以后的查询.具体代码如下所示: /** * 将文件上传到服务器 * * @param filePath * 文件路径 * @param channelSftp * channelSftp对象 * @return */ public static boolean uploadFile(String filePath, ChannelSftp channelSftp) { OutputStream outstream = null; In

Python ftp上传文件

以下代码比较简单,对python实现ftp上传文件相关知识感兴趣的朋友可以参考下 #encoding=utf8 from ftplib import FTP #加载ftp模块 IP = '103.240.150.104' user = 'webmaster@stchat.cn' password = '5' filename = 'zhihu.html' path = '/root/Desktop/zhihu.html' ftp=FTP() #设置变量 ftp.set_debuglevel(2)

springmvc利用jquery.form插件异步上传文件示例

需要的下载文件: jQuery.form.js jquery.js commons-fileupload.jar commons-io.jar 示例图片 pom.xml <!-- 文件上传 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3</ve