怎么用JSP把本地的文件夹上传到FTP服务器?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么用JSP把本地的文件夹上传到FTP服务器?相关的知识,希望对你有一定的参考价值。
A:本地, B:部署JSP的服务器 C:FTP服务器, 现在想用B的JSP把A的文件夹上传到C上 ,这个要怎么实现啊?
怎么用JAVA实现对FTP服务器上文件的复制功能?
package com.ftp.upload;
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 org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
public class FTPUpload
private FTPClient ftpClient = null;
private OutputStream outSteam = null;
/**
* ftp服务器地址
*/
private String hostname = "192.168.1.2";
/**
* ftp服务器端口
*/
int port = 21;
/**
* 登录名
*/
private String username = "admin";
/**
* 登录密码
*/
private String password = "admin";
/**
* 需要访问的远程目录
*/
private String remoteDir = "/home/demo";
public FTPUpload()
public FTPUpload(String hostname, int port, String username, String password, String remoteDir)
this.hostname = hostname;
this.port = port;
this.username = username;
this.password = password;
this.remoteDir = remoteDir;
/**
* 连接FTP服务器 并登录
* @param hostName FTP服务器hostname
* @param port FTP服务器端口
* @param username FTP登录账号
* @param password FTP登录密码
*/
private FTPClient connectFTPServer()
try
//1.创建FTPClient对象
ftpClient = new FTPClient();
//2.连接FTP服务器
// 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
ftpClient.connect(hostname, port); //链接到ftp服务器
// System.out.println("连接到ftp服务器地址 --> ftp://" + hostName + ":" + port + " 成功..开始登录");
//3.判断连接ftp服务器是否成功
int reply = ftpClient.getReplyCode();
// System.out.println("以2开头的返回值就会为真:" + reply);
//以2开头的返回值就会为真
if (!FTPReply.isPositiveCompletion(reply))
ftpClient.disconnect();
return null;
//4.登录FTP服务器.用户名 密码
ftpClient.login(username, password);
System.out.println("登录成功." );
return ftpClient;
catch (Exception e)
e.printStackTrace();
ftpClient = null;
return ftpClient;
/**
* 向FTP服务器上传文件
* @param filePathName 上传文件的全路径名称
* @return 成功返回true,否则返回false
*/
public boolean uploadFile(String filePathName)
// 初始表示上传失败
boolean success = false;
try
// 创建FTPClient对象
ftpClient = connectFTPServer();
//创建文件夹
boolean flag = ftpClient.makeDirectory(remoteDir);
if(flag)
System.out.println("创建文件夹:" + remoteDir );
// 转到指定上传目录
boolean flag0 = ftpClient.changeWorkingDirectory(remoteDir);
// 将上传文件存储到指定目录
if(filePathName == null || filePathName.length() == 0)
return success;
String filename = filePathName.substring(filePathName.replace("\\", "/").lastIndexOf("/") + 1, filePathName.length());
InputStream input = new FileInputStream(new File(filePathName));
// ftpClient.setBufferSize(1024);
// ftpClient.setControlEncoding("GBK");
// ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);//设置文件类型
boolean flag1 = ftpClient.storeFile(filename, input);
System.out.println("转到指定上传目录:" + flag0 + " 将上传文件存储到指定目录:" + flag1);
input.close(); // 关闭输入流
ftpClient.logout(); // 退出ftp
success = true; // 表示上传成功
catch (Exception e)
e.printStackTrace();
finally
if (ftpClient.isConnected())
try
ftpClient.disconnect();
catch (IOException ioe)
return success;
/**
* 从FTP服务器指定目录下载文件 到本地目录中 OK
* @param fileName 要下载的文件名
* @param localPath 下载后保存到本地的路径
* @param showlist 下载时是否显示列表 ( true 显示 )
* @return
*/
public boolean downFile(String fileName, String localPath, boolean showlist)
// 初始表示下载失败
boolean success = false;
if(fileName == null || fileName.length() == 0 || localPath == null || localPath.length() == 0)
return success;
try
File file = new File(localPath);
if(!file.isDirectory())
file.mkdir();
// 创建FTPClient对象
ftpClient = connectFTPServer();
// 转到指定下载目录
boolean flag = ftpClient.changeWorkingDirectory(remoteDir);
if(!flag)
System.out.println("目录:" + remoteDir +"不存在!");
return success;
// 列出该目录下所有文件
FTPFile[] remoteFiles = ftpClient.listFiles();
// 遍历所有文件,找到指定的文件
if(showlist)
System.out.println("目录" + remoteDir + "下的文件:");
for (FTPFile ftpFile : remoteFiles)
String name = ftpFile.getName();
if(showlist)
long length = ftpFile.getSize();
String readableLength = FileUtils.byteCountToDisplaySize(length);
System.out.println(name + ":\t\t" + readableLength);
if (name.equals(fileName))
// 根据绝对路径初始化文件
File localFile = new File(localPath + "/" + name);
// 输出流
OutputStream is = new FileOutputStream(localFile);
// 下载文件
ftpClient.retrieveFile(name, is);
is.close();
// 退出ftp
ftpClient.logout();
// 下载成功
success = true;
catch (IOException e)
e.printStackTrace();
finally
if (ftpClient.isConnected())
try
ftpClient.disconnect();
catch (IOException ioe)
return success;
/**
* 显示FTP服务器指定文件夹中的文件及大小 OK
* @return
*/
private boolean showFileList()
// 初始表示失败
boolean success = false;
try
ftpClient = connectFTPServer();
FTPFile[] remoteFiles = null;
// 转到指定下载目录
boolean flag = ftpClient.changeWorkingDirectory(remoteDir);
if(!flag)
System.out.println("目录:" + remoteDir +"不存在!");
return success;
else
remoteFiles = ftpClient.listFiles(remoteDir);
System.out.println("目录" + remoteDir + "下的文件:");
if(remoteFiles != null)
for(int i=0;i < remoteFiles.length; i++)
String name = remoteFiles[i].getName();
long length = remoteFiles[i].getSize();
String readableLength = FileUtils.byteCountToDisplaySize(length);
System.out.println(name + ":\t\t" + readableLength);
// 表示成功
success = true;
catch (Exception e)
e.printStackTrace();
finally
//使用IO包关闭流
IOUtils.closeQuietly(outSteam);
try
ftpClient.disconnect();
catch (IOException ioe)
ioe.printStackTrace();
return success;
public static void main(String[] args)
FTPUpload ftp = new FTPUpload();
ftp.uploadFile("c:////test////bgssp.jar");
追问
这样做的话是把本地上文件上传 如果 JSP的服务不部署在本地呢?
追答文件始终在服务器上某处存着,文件路径就给他服务器上面的地址
参考技术A 用smartupload组件试试追问smartupload 可以把文件从本地上传到服务器,还必须在服务器建一个临时文件夹才能再上传到FTP服务器?
参考技术B ftp软件,用户名密码整错,建立连接,可以访问服务器了追问想实现用JSP 上传文件夹到FTP服务器的功能
参考技术C dui de怎么把一个FTP服务器的文件传到另一个FTP服务器上不?
FTP互传是正常的操作方式:1.
打开ftp客户端,比如flashfxp,首先链接前者ftp客户端,软件左侧出现服务器文件列表。
2.
在客户端右侧链接功能,直接链接后者ftp服务器,出现目录列表。
3.
在左侧选择需要传输的文件,直接拖放到右侧目标文件夹,即可开始自动传输。 参考技术A 下载后,重新上传。用爱米云共享网盘的话,换服务器就简单了,自带有导出导入功能。ftp的其他功能也都有,但用起来比ftp方便
以上是关于怎么用JSP把本地的文件夹上传到FTP服务器?的主要内容,如果未能解决你的问题,请参考以下文章