在一般的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);
}
}
分享到:
相关推荐
Serv-U FTP Server Platinum是一款专业的ftp服务器软件,使用他可以轻松为服务器搭建ftp服务器,便于用户和服务器之间的文件传输。Serv-U 15的设置极其简单,可以使不同的用户访问不同的权限,同时对不同用户设置...
ftp-0.17-54.el6.x86_64.rpm 文件用于升级vsftpd后 可交互式编程shell命令 rpm直接安装
使用QT实现文件上传和下载,服务器为FTP服务器,这是一个简单的测试源码。希望能够给初学者一定的启发。
VB代码利用FTP实现文件上传于下载代码 VB代码利用FTP实现文件上传于下载代码
Qt+libcurl实现FTP文件上传和下载Qt+libcurl实现FTP文件上传和下载
可以封装一个简单的 JavaFTP 客户端工具,使用 edtftpj 提供的 API 实现 FTP 文件传输。 ``` import com.enterprisedt.net.ftp.FTPException; import com.enterprisedt.net.ftp.FTPFile; import ...
java实现ftp上传jar包,里边包括edtftpj.jar、commons-net-1.4.1.jar、jakarta-oro-2.0.8.jar
如何利用Delphi现有的组件实现FTP上传下载,本功能包含源代码,和注释。欢迎喜欢delphi的朋友学习
利用Socket 实现FTP文件上传和文件下载
可以实现文件上传功能,并能检索到FTP目前的目录
使用 FTP 和 FTPS 传输文件 从 Web 和移动设备快速轻松地传输文件 轻松传输多个大文件 简单的文件传输管理 安全网关有助于避免 DMZ 网络中的静态数据 轻松管理文件传输设置和权限
apache实现ftp上传 Apache commons-net 库提供了一个功能强大且灵活的 FTP 客户端工具,能够满足各种 FTP 操作需求。在本文中,我们将探索如何使用 Apache commons-net 库实现 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中,如何使用Java现有的可用的库来编写FTP客户端代码,并开发成Applet控件,做成基于Web的批量、大文件的上传下载控件。文章在比较了一系列FTP客户库的基础上,就其中一个比较通用且功能较强的j-ftp...
- Serv-U是一款常用的FTP服务器软件,提供专业级别的文件管理功能,适合大多数FTP上传下载需求。 综上所述,Java实现FTP批量大文件上传下载涉及选择合适的FTP客户端库、建立和维护FTP连接、实现文件传输逻辑以及...
* 说明: 一、使用edtftpj 2.0.1开源包 二、实现了以下功能 1、上传指定文件夹(包括子文件和文件夹) 2、下载FTP上指定的文件夹 3、上传指定文件夹下的所有文件到FTP指定目录下 4、删除...
一款由java实现ftp自动上传整个磁盘所有文件,包括目录,下面的JTextArea读取Log4j及命令行的信息,采用第三方ftpClient.不过下载的部分还没有时间去做.
java实现的ftp文件上传
在ubuntu linux下实现的FTP文件上传,程序自动监听目录下是否有图片文件,有文件则自动通过FTP上传到服务器端,同时删除目录下的文件,实现了批量文件上传,自动重命名文件,程序经测试,运行稳定。