`
Jeenry119
  • 浏览: 68348 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

利用edtftpj组件实现FTP文件的上传--方法一

 
阅读更多
在一般的web应用中,文件上传可以分为两类(ftp上传和http上传)。其中http上传是在页面的form表单中加入<input type=“file“ name=“file“>类型的接口,当表单被提交时,file中所指的文件就会被写入request对象中。那么在服务器端,用户只要根据rfc1867协议解析request中的数据流就可以得到文件,但是这样上传的速度很慢了,并且对文件的大小又要求。相比之下,ftp上传就很优越了。他是ftp客户端直接与ftp服务器进行交互,将文件创传到ftp服务器。当然,ftp客户端已经被实现。下面我们就应用第三方ftp客户端实现ftp上传。

首先,从www.enterprisedt.com下载ftp客户端。整个应用公有五个类组成Upload.java,FileUpload.java,DirectoryUpload.java,Directory.java,UploadException.java.希望大家改进。

  /*
   * @(#)Upload.java 1.0 04/11/17
   * 实现上传前的初始化
   */
  package com.head.upload;
  //调用第三方ftp客户端,可在www.enterprisedt.com下载
  import com.enterprisedt.net.ftp.*;
  import java.io.*;
  public class Upload {
  
   static FTPClient ftpClient;
   static String path;
   //ftp服务器的ip地址,登陆用户和密码
   String remoteAddress="127.0.0.1",userName="xie",password="xie";
  
   Upload(){}
  
   Upload(String path){
   this.path = path;
   }
  
   public boolean config(String fileName) throws UploadException {
   //从配置文件中读取远端地址,用户名和密码(没实现)
   return false;
   }
  
   public void init() throws UploadException {
   try{
   ftpClient = new FTPClient(this.remoteAddress);
   ftpClient.login(this.userName,this.password);
   ftpClient.setConnectMode(FTPConnectMode.PASV);
   ftpClient.setType(FTPTransferType.BINARY);
   }catch(Exception e)
   {
   throw new UploadException(e.toString(),"Upload.init()");
   }
  
   }
  
   public boolean upload() throws UploadException {
   File file = null;
   boolean flag = false;
   try{
   init();
  
   file = new File(path);
   if(file.isFile() && new FileUpload().uploadFile())
   flag = true;
   else if(file.isDirectory() && new DirectoryUpload().uploadFile(path))
   flag = true;
   }catch(Exception e)
   {
   throw new UploadException(e.toString(),"Upload.upload()");
   }
   finally{
   clear(ftpClient);
   }
   return flag;
   }
  
  
   boolean clear(FTPClient ftpClient) throws UploadException {
   try{
   ftpClient.quit();
   return true;
   }catch(Exception e)
   {
   throw new UploadException(e.toString(),"Upload.clear(ftpClient)");
   }
   }
  
   }
  }
  /*
   * @(#)FileUpload.java 1.0 04/11/17
   *
   * 上传单个文件
   */
  package com.head.upload;
  import com.enterprisedt.net.ftp.*;
  import java.io.*;
  public class FileUpload extends Upload {
  
   FileUpload(){}
  
   public boolean uploadFile() throws UploadException{
   //the name of file will be changed to avoid iteration
   String fileName = path.substring(path.lastIndexOf("\\")+1);
   try{
   ftpClient.put(path,fileName);
   return true;
   }catch(Exception e){
   throw new UploadException(e.toString(),"FileUpload.uploadFile()");
   }
   }
  
   public boolean uploadFile(String name) throws UploadException{
   //the name of file will be changed to avoid iteration
   String fileName = name.substring(name.lastIndexOf("\\")+1);
   try{
   ftpClient.put(name,fileName);
   return true;
   }catch(Exception e){
   throw new UploadException(e.toString(),"FileUpload.uploadFile(name)");
   }
   }
   }
  *
   * @(#)DirectoryUpload.java 1.0 04/11/17
   *
   * 上传文件夹
   */
  package com.head.upload;
  import com.enterprisedt.net.ftp.*;
  import java.io.*;
  public class DirectoryUpload extends Upload {
  
   DirectoryUpload(){}
  
   public boolean uploadFile(String dir) throws UploadException{
   //the name of directory will be changed to avoid iteration
   String dirName = dir.substring(dir.lastIndexOf("\\")+1);
   ftpMkDir(dirName);
  
   try{
   String currentDir = ftpClient.pwd();
   ftpClient.chdir(dirName);
   String[] subFiles = new Directory(dir).fileNames();
   for(int i=0;i<subFiles.length;i++) {
   String tmpP = dir +"\\" + subFiles[i];
   if(new File(tmpP).isFile()) {
   System.out.println("upload file:"+tmpP);
   new FileUpload().uploadFile(tmpP);
   }
   else{
   System.out.println("into the directory:"+tmpP);
   uploadFile(tmpP);
   }
   }
   ftpClient.chdir(currentDir);
   }catch(Exception e){
   throw new UploadException(e.toString(),"DirecotryUpload.uploadFile()");
   }
  
   return false;
   }
  
   private synchronized void ftpMkDir(String dirName) throws UploadException{
   try{
   ftpClient.mkdir(dirName);
   }catch(Exception e)
   {
   throw new UploadException(e.toString(),"DirecotryUpload.ftpMkDir(dirName)");
   }
   }
  
  
   }
  /*
   * @(#)Directory.java 1.0 04/11/17
   *
   *
   */
  package com.head.upload;
  import com.enterprisedt.net.ftp.*;
  import java.io.*;
  public class Directory {
  
   private String path;
  
   Directory(){}
  
   Directory(String path) {
   this.path = path;
   }
  
   //返回一个目录下所有的文件
   String[] fileNames() {
   String[] subNames = null;
   try{
   File file = new File(path);
   subNames = file.list();
   }catch(Exception e)
   {
   System.out.println(e.toString());
   }
   return subNames;
   }
  
   }
  
  /*
   * @(#)UploadException.java 1.0 04/11/17
   *
   *
   */
  package com.head.upload;
  
  public class UploadException extends Exception {
  
   UploadException(String eInfo,String location) {
   String info = "The error("+eInfo+") occur in "+location;
   System.out.println(info);
   }
  }
分享到:
评论

相关推荐

    经典FTP软件SU-FTP-Server-Windows

    Serv-U FTP Server Platinum是一款专业的ftp服务器软件,使用他可以轻松为服务器搭建ftp服务器,便于用户和服务器之间的文件传输。Serv-U 15的设置极其简单,可以使不同的用户访问不同的权限,同时对不同用户设置...

    linux ftp shell ftp-0.17-54.el6.x86_64.rpm

    ftp-0.17-54.el6.x86_64.rpm 文件用于升级vsftpd后 可交互式编程shell命令 rpm直接安装

    使用QT实现文件上传和下载----ftp服务器

    使用QT实现文件上传和下载,服务器为FTP服务器,这是一个简单的测试源码。希望能够给初学者一定的启发。

    VB代码利用FTP实现文件上传于下载代码

    VB代码利用FTP实现文件上传于下载代码 VB代码利用FTP实现文件上传于下载代码

    Qt+libcurl实现FTP文件上传和下载

    Qt+libcurl实现FTP文件上传和下载Qt+libcurl实现FTP文件上传和下载

    edtftpj的ftp操作

    可以封装一个简单的 JavaFTP 客户端工具,使用 edtftpj 提供的 API 实现 FTP 文件传输。 ``` import com.enterprisedt.net.ftp.FTPException; import com.enterprisedt.net.ftp.FTPFile; import ...

    java实现ftp上传jar包

    java实现ftp上传jar包,里边包括edtftpj.jar、commons-net-1.4.1.jar、jakarta-oro-2.0.8.jar

    Delphi_组件实现FTP上传

    如何利用Delphi现有的组件实现FTP上传下载,本功能包含源代码,和注释。欢迎喜欢delphi的朋友学习

    FTPUtil.vb 利用Socket 实现FTP文件上传和文件下载

    利用Socket 实现FTP文件上传和文件下载

    VB实现FTP上传文件功能

    可以实现文件上传功能,并能检索到FTP目前的目录

    SolarWinds-SERVU-FTP-Server-v15.3.0.1356-Windows

    使用 FTP 和 FTPS 传输文件 从 Web 和移动设备快速轻松地传输文件 轻松传输多个大文件 简单的文件传输管理 安全网关有助于避免 DMZ 网络中的静态数据 轻松管理文件传输设置和权限

    apache实现ftp上传

    apache实现ftp上传 Apache commons-net 库提供了一个功能强大且灵活的 FTP 客户端工具,能够满足各种 FTP 操作需求。在本文中,我们将探索如何使用 Apache commons-net 库实现 FTP 上传功能。 FTP 客户端工具 ...

    用批处理命令实现FTP文件的自动传输

    在 UNIX 操作系统下,也可以使用 FTP 命令实现文件传输。例如,可以编写一个 shell 文件 ft.sh,内容如下: Ftp -n ! Open 16.73.81.20 User backup Cjy Ascii Cd cb2000 Get initlhrw.txt Bye! 将该文件权限设置...

    用JAVA实现Ftp文件上传下载

    用JAVA实现Ftp文件上传下载,提供实现方法和测试用例

    ftp上传实例--批量、大文件的上传下载控件

    本文介绍了在Java中,如何使用Java现有的可用的库来编写FTP客户端代码,并开发成Applet控件,做成基于Web的批量、大文件的上传下载控件。文章在比较了一系列FTP客户库的基础上,就其中一个比较通用且功能较强的j-ftp...

    Java实现FTP批量大文件上传下载

    - Serv-U是一款常用的FTP服务器软件,提供专业级别的文件管理功能,适合大多数FTP上传下载需求。 综上所述,Java实现FTP批量大文件上传下载涉及选择合适的FTP客户端库、建立和维护FTP连接、实现文件传输逻辑以及...

    ftp4che-src-0.7.1.zip

    * 说明: 一、使用edtftpj 2.0.1开源包 二、实现了以下功能 1、上传指定文件夹(包括子文件和文件夹) 2、下载FTP上指定的文件夹 3、上传指定文件夹下的所有文件到FTP指定目录下 4、删除...

    java实现ftp自动上传文件

    一款由java实现ftp自动上传整个磁盘所有文件,包括目录,下面的JTextArea读取Log4j及命令行的信息,采用第三方ftpClient.不过下载的部分还没有时间去做.

    java实现的ftp文件上传

    java实现的ftp文件上传

    ubuntu linux 下C语言实现FTP批量文件上传

    在ubuntu linux下实现的FTP文件上传,程序自动监听目录下是否有图片文件,有文件则自动通过FTP上传到服务器端,同时删除目录下的文件,实现了批量文件上传,自动重命名文件,程序经测试,运行稳定。

Global site tag (gtag.js) - Google Analytics