`
Jeenry119
  • 浏览: 69587 次
  • 性别: 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);
   }
  }
分享到:
评论

相关推荐

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

    Linux FTP Shell指的是在Linux系统中使用FTP协议进行文件传输时的一种交互式命令行环境,它允许用户通过命令行界面执行FTP操作。在这个场景中,`ftp-0.17-54.el6.x86_64.rpm` 是一个RPM(Red Hat Package Manager)...

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

    FTP上传文件的实现可以使用QNetworkAccessManager的put()函数。假设我们有一个本地文件`localFilePath`,我们希望上传到服务器的`remoteFilePath`: ```cpp QFile localFile(localFilePath); if (!localFile.open...

    hdfs-over-ftp-hadoop-0.20.0.rar_ftp_ftpoverhdfs_hdfs文件传入ftp_java

    描述 "在hadoop分布式文件系统上实现ftp服务" 暗示了这个压缩包包含了一个解决方案,允许用户使用FTP协议来上传、下载或管理HDFS中的文件。这对于那些习惯于使用FTP或者不熟悉Hadoop API的用户来说,是一个便捷的...

    java实现的ftp文件上传

    首先,我们来看标题和描述中的关键词"java实现的ftp文件上传",这表明我们要讨论的是使用Java编程语言来实现在FTP服务器上上传文件的过程。Java提供了一个名为`java.net.Socket`的基本网络连接类,但直接使用它来...

    winform实现FTP上传、下载、删除文件

    **FTP上传文件:** 要实现FTP文件上传,我们首先创建一个`FtpWebRequest`对象,设置其方法为`WebMethod.UploadFile`,然后提供FTP服务器的URL、用户名和密码。接着,打开一个流写入器,将本地文件内容写入请求的主体...

    实现Qt-FTP上传文件

    // 将libcurl的FTP上传操作包装为一个异步请求 QNetworkRequest request; // 设置其他请求头等信息... QNetworkReply *reply = manager-&gt;post(request, QByteArray()); connect(reply, &QNetworkReply::finished, ...

    Delphi_组件实现FTP上传

    总的来说,Delphi结合Indy库的TIdFTP组件,为开发者提供了一个强大且易于使用的FTP客户端解决方案,使得在Delphi应用程序中实现文件的上传和下载变得简单高效。只要掌握了基本的使用方法,就可以轻松地将FTP功能集成...

    commons-net-1.4.1.jar、jakarta-oro-2.0.8.jar、edtftpj.jar

    在Java应用程序中,开发者可以利用这个库实现复杂的FTP操作,包括文件的上传、下载、移动、重命名以及目录管理等。 这些库文件在Java FTP编程中至关重要,它们为开发者提供了方便的接口和功能,使得处理FTP通信变得...

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

    在Visual Basic(VB)编程环境中,我们可以利用FTP协议来实现文件的上传和下载功能。以下将详细介绍如何在VB中利用FTP进行文件操作,并提供相关的知识点。 首先,VB中的FTP操作通常需要使用System.Net命名空间中的...

    Delphi 实现FTP连接及上传下载

    使用Delphi和Indy库,你可以轻松地构建功能完备的FTP客户端应用,实现文件的高效上传和下载。 以上就是关于“Delphi实现FTP连接及上传下载”的详细知识点。通过理解和实践这些步骤,开发者可以在Delphi应用程序中...

    Android Studio实现FTP文件上传

    在Android开发中,有时我们需要将应用内的数据或者文件上传到远程服务器,FTP(File Transfer Protocol)是一种常用的文件传输协议,可以实现这一需求。本教程主要介绍如何在Android Studio项目中集成FTP文件上传...

    netkit-ftp-0.17嵌入式ftp客户端源码(加入了编译修改)

    在嵌入式系统开发领域,FTP客户端是实现远程文件传输的重要组件。本文将详细探讨基于netkit-ftp-0.17的源码,并结合其中加入的补丁netkit-ftp-0.17-cross.patch,以及对glob.c和makefile的修改,来解析其在嵌入式ARM...

    SU-FTP-Server-Windows-v15.0.0

    “用于FTP文档的生成”可能是指该软件提供了创建、管理和维护FTP站点的功能,使得文件上传和下载过程变得简单高效。“不失真,方便使用”强调了该软件在传输文件时能保持文件完整性,同时具有用户友好的界面和操作...

    ftp-0.17-51.1.el6.x86_64.rpm

    ftp-0.17-51.1.el6.x86_64.rpm

    java实现ftp上传jar包

    Java FTP上传JAR包是一项常见的任务,特别是在自动化部署或者远程更新系统组件时。在这个过程中,我们需要使用Java编程语言,结合FTP(File Transfer Protocol)协议来实现在服务器上上传JAR文件。以下是一些相关的...

    基于ftp4j-1.7.2.jar包,实现FTP上传文件

    使用`ftp4j`实现FTP上传文件的基本步骤如下: 1. **创建FTPClient对象**:首先,你需要实例化一个`FTPClient`对象,这将作为与FTP服务器交互的接口。 ```java FTPClient client = new FTPClient(); ``` 2. **...

    ftp4che-src-0.7.1.zip

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

    java实现ftp自动上传文件

    JTextArea是Java Swing组件,常用于显示多行文本,这里可能被用来实时显示FTP上传过程中的日志信息,为用户提供可视化的上传状态。而Log4j是一个流行的Java日志框架,用于记录程序运行时的各种信息,开发者可能会...

    ftp-0.17-54.el6.x86_64.rpm及vsftpd-2.2.2-11.el6.x86_64.rpm

    `ftp-0.17-54.el6.x86_64.rpm` 是一个FTP客户端软件包,它提供了命令行界面的FTP工具,用户可以通过这个工具连接到FTP服务器,进行上传、下载和其他文件管理操作。在Linux系统中,这个FTP客户端通常包括`ftp`和`...

    用JAVA实现Ftp文件上传下载

    在`TestFtpUpload`文件中,可以编写单元测试或集成测试来验证FTP上传和下载功能。例如,你可以创建一个测试类`FtpOperationsTest`,包含如下方法: ```java import org.junit.jupiter.api.Test; import org.apache....

Global site tag (gtag.js) - Google Analytics