设为首页 收藏本站
查看: 815|回复: 0

[经验分享] jsp如何下载FTP上的文件 .

[复制链接]

尚未签到

发表于 2016-6-9 10:56:39 | 显示全部楼层 |阅读模式
一共两段程序,可对比一下找出区别
①---ftp协议方式
一、创建java类:
package ftp;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.StringTokenizer;
import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;
public class FtpFile {
String serverIp = "192.168.12.49";
String serverUser = "admin";
String serverPwd = "admin";

FtpClient aftp;
DataOutputStream outputs;
TelnetInputStream ins;
TelnetOutputStream outs;
int ch;
public String a;
String hostname = "";
private String path = "/";

public FtpClient connect(String RWFileDir, String hostname, int port,
String uid, String pwd) {
/*
* this.hostname = hostname;
* System.out.println("正在连接"+hostname+",请等待....."); try{ aftp = new
* FtpClient(hostname,port); aftp.login(uid,pwd); aftp.binary();
* //aftp.openPortDataConnection(); a = "连接主机:"+hostname+"成功!";
* System.out.println(a); } catch(FtpLoginException e){
* a="登陆主机:"+hostname+"失败!请检查用户名或密码是否正确:"+e; System.out.println(a);
* //return false; } catch (IOException e){
* a="连接主机:"+hostname+"失败!请检查端口是否正确:"+e; System.out.println(a); //return
* false; } catch(SecurityException e) {
* a="无权限与主机:"+hostname+"连接!请检查是否有访问权限:"+e; System.out.println(a);
* //return false; }
*/
// log(RWFileDir,a);
FtpClient ftpClient = null;
try {
ftpClient = new FtpClient();
// 创建FtpClient对象
ftpClient.openServer(hostname);
// 连接FTP服务器
ftpClient.login(uid, pwd);
// 登录FTP服务器
aftp = ftpClient;
aftp.cd(RWFileDir);
} catch (IOException ex) {
;
}
return ftpClient;
}
public void stop(String RWFileDir) {
String message = "";
try {
if (aftp != null) {
aftp.closeServer();
message = "与主机" + hostname + "连接已断开!";
System.out.println(message);
//log(RWFileDir, message);
}
} catch (IOException e) {
message = "与主机" + hostname + "断开连接失败!" + e;
System.out.println(message);
log(RWFileDir, message);
}
}



public void showFileContents(String strdir) {
StringBuffer buf = new StringBuffer();
try {
aftp.cd(strdir);
ins = aftp.list();
while ((ch = ins.read()) >= 0) {
buf.append((char) ch);
}
System.out.println("buf-------------" + buf.toString());
ins.close();
} catch (IOException e) {
}
}
// 返回当前目录的所有文件及文件夹
public ArrayList getFileList() throws IOException {
BufferedReader dr = new BufferedReader(new InputStreamReader(aftp
.list()));
ArrayList a1 = new ArrayList(); // 存放文件
// ArrayList a2= new ArrayList(); //存放文件夹
ArrayList a3 = new ArrayList(); // 存放文件夹详细资料
// ArrayList a4= new ArrayList(); //存放文件夹下其它文件夹下的文件
ArrayList a5 = new ArrayList(); // 存放文件夹下其它文件夹下的文件
String s = "";
// Hashtable ha=new Hashtable();
// ha=null;
while ((s = dr.readLine()) != null) {
if (isFile(s)) {
// a4.clear();
// a4.remove(0);
// a4=null;
ArrayList a4 = new ArrayList(); // 存放文件夹下其它文件夹下的文件
a4.add(parseLine(s).get(8).toString());
a4.add("文件");
a4.add(parseLine(s).get(4).toString() + "bytes");
a3.add(a4);
}
else if (isDir(s)) {
// a2.add(parseLine(s).get(8));
// showFileContents(s);
// a3.add(parseLine(s));
// System.out.println("ssssssss:"+s);
// a4.add(getNameList(s));
// a2.clear();
// a2.remove(0);
// a2=null;
String tem = parseLine(s).get(8).toString();
if ((tem.trim().equals(".")) || (tem.trim().equals(".."))) {
} else {
ArrayList a2 = new ArrayList(); // 存放文件夹
a2.add(parseLine(s).get(8).toString());
// a2.add("nbsp;");
a2.add("文件夹");
a2.add(parseLine(s).get(4).toString() + "bytes");
a1.add(a2);
}
}
// a1.add(parseLine(s).get(8));
// a1.add(s);
// System.out.println("xxxxxxxxxxxxxxxxx:"+parseLine(s).get(8));
// a1.addAll(a2);
}
a5.add(a1);
a5.add(a3);
dr.close();
aftp.closeServer();
return a5;
}
public void setPath(String path) throws IOException {
if (aftp == null)
this.path = path;
else {
aftp.cd(path);
}
}
// 返回当前目录的文件名称
public ArrayList getNameList(String RWFileDir) throws IOException {
// System.out.println("xxxxxxx--------------111111111");
BufferedReader dr = new BufferedReader(new InputStreamReader(aftp
.nameList(RWFileDir)));
// System.out.println("xxxxxxx---------------22222222222");
// System.out.println(dr.readLine().toString()+"ddddddddd");
ArrayList al = new ArrayList();
String s = "";
int j = 0;
while ((s = dr.readLine()) != null) {
System.out.println(s);
al.add(s);
j++;
// s = s.substring(13,s.length());
isFile(s);
// downloadFile(RWFileDir,s);
// String strFileDelF = aftp.nameList("subunsubtosp//");
// File fileDelF=new File(s);
// fileDelF.delete();
}
System.out.println("xxxxxxxxxxxx" + j);
return al;
// System.out.println(al.add(s));
}
// 判断一行文件信息是否为目录
public boolean isDir(String line) {
return ((String) parseLine(line).get(0)).indexOf("d") != -1;
}
public boolean isFile(String line) {
return !isDir(line);
}
// 处理getFileList取得的行信息
private ArrayList parseLine(String line) {
ArrayList s1 = new ArrayList();
StringTokenizer st = new StringTokenizer(line, " ");
while (st.hasMoreTokens()) {
s1.add(st.nextToken());
}
return s1;
}
// 写消息日志
public static void log(String RWFileDir, String msg) {
String message = "";
try {
java.text.DateFormat df = new java.text.SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
java.text.DateFormat dflog = new java.text.SimpleDateFormat(
"yyyyMMdd");
java.util.Date date = new java.util.Date();
String datestr = df.format(new java.util.Date());
String datelog = dflog.format(new java.util.Date());
// String datelog = datestr.substring(0,10);
// datelog = datelog.replace('-',' ');
// 按日期每天生成一个日志文件
FileWriter fwl = new FileWriter(RWFileDir + "CMSSftp" + datelog
+ ".log", true);
PrintWriter outl = new PrintWriter(fwl);
outl.println(datestr + "  " + msg);
outl.close();
fwl.close();
} catch (IOException e) {
message = "写log文件错误!" + e;
e.printStackTrace();
log(RWFileDir, message);
System.out.println(message);
}
}
}
二、创建main.jsp页面下载文件,链接彩用ftp://用户名:密码:@IP/目录名/文件名   形式:
<%@ page language="java" contentType="text/html; charset=GB2312"%>
<%@ page import="ftp.*"%>
<%@ page import="java.util.ArrayList;"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>FTP下载主页面</title>
<meta content="text/html; charset=gb2312" http-equiv="Content-Type">
<link rel="stylesheet" type="text/css" href="css/list.css">
</head>
<body>
<form id='list' name='list' action='post'>
<%
/*
*FTP文件列表功能:从FTP上列出存在的目录及文件
*FTP文件下载功能:从FTP上下载相应的文件
*/
String server = "192.168.12.49"; // 输入的FTP服务器的IP地址
String user = "admin"; // 登录FTP服务器的用户名
String password = "admin"; // 登录FTP服务器的用户名的口令
String path = request.getParameter("path");
if ((path == null) || (path.length() < 1)) {
path = "/";
} else {
path = new String(path.getBytes("ISO-8859-1"), "GBK"); //防止出现乱码
}
ArrayList arr = new ArrayList(); //用于存放根目录下的目录list和文件list
ArrayList arr1 = new ArrayList(); //用于存放根目录下的目录list
ArrayList arr2 = new ArrayList(); //用于存放根目录下的文件list
ArrayList arr3 = new ArrayList(); //临时list,用于存放目录名和文件名
FtpFile ft = null;
try {
ft = new FtpFile();
ft.connect(path, server, 21, user, password);
arr = ft.getFileList(); //获取根目录文件夹列表
} catch (Exception ex) {
System.out.println(ex.toString());
}
arr1 = (ArrayList) arr.get(0);
arr2 = (ArrayList) arr.get(1);
out
.print("<font size='4'><center><b>FTP 文 件 列 表</b></center></font><br>");
out.print("<table style='width:80%' align='center'><tr>");
out.print("<td align='left'><font size='2' color='red'>*当前位置:"
+ path + "</font></td>");
out
.print("<td align='right'><input type='button' align='right' value='返回上一页' onClick='history.go(-1)'></td>");
out
.println("<table border=0 cellPadding='5' cellSpacing='2' class='listtable' align='center' style='width:80%'><tr class='firstline'><td width='200px'align='center'>文件名</td><td width='60px' align='center'>类型</td><td width='100' align='center'>大小</td><td align='center'>下载</td></tr>");
for (int i = 0; i < arr1.size(); i++) { //取出文件夹
arr3 = (ArrayList) arr1.get(i);
out.print("<tr class='line'>");
for (int j = 0; j < arr3.size(); j++) {
out.print("<td><B>");
String tempstr = arr3.get(j).toString();
if (j == 0) {
if (path.length() > 1) {
out.print("<a href='main.jsp?path=" + path + "/"
+ tempstr + "'>" + tempstr + "</a>");
} else {
out.print("<a href='main.jsp?path=" + path
+ tempstr + "'>" + tempstr + "</a>");
}
} else {
out.print(tempstr);
}
out.print("</B></td>");
}
out.print("<td>&nbsp;</td></tr>");
}
String filename = null;
for (int i = 0; i < arr2.size(); i++) { //取出文件
arr3 = (ArrayList) arr2.get(i);
out.print("<tr class='line'>");
for (int j = 0; j < arr3.size(); j++) {
out.print("<td>");
String tempstr = arr3.get(j).toString();
if (j == 0) {
filename = tempstr;
if (path.trim().length() > 1) { //如果path带有下级有子文件
out.print("<a href='ftp://" + user + ":" + password
+ "@" + server + path + "/" + filename
+ "'>" + tempstr + "</a>");
} else { //path只是根目录
out.print("<a href='ftp://" + user + ":" + password
+ "@" + server + path + filename + "'>"
+ tempstr + "</a>");
}
} else {
out.print(tempstr);
}
out.print("</td>");
}
if (path.trim().length() > 1) { //如果path带有下级有子文件
out
.print("<td width='100px' align='center'><a href='ftp://"
+ user
+ ":"
+ password
+ "@"
+ server
+ path
+ "/"
+ filename
+ "'>下载</a></td></tr>");
} else { //path只是根目录
out
.print("<td width='100px' align='center'><a href='ftp://"
+ user
+ ":"
+ password
+ "@"
+ server
+ path + filename + "'>下 载</a></td></tr>");
}
}
out.print("</table>");
ft.stop(path);
ft = null;
%>
</form>
</body>
</html>

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
②另一段:直接将文件下载到本地硬盘
此功能是下接将FTP上的文件下载到本地硬盘指定位置,没有能过各种下载软件,对于下载软件的做法实验过多次,存在中文名称的文件不能下载的问题, 而且在TOMCAT下可以下载英文名称的文件,在WEBLOGIC下英文名称的文件下载后,无法使用,只有部分格式的可以用,如RAR.JPG等,对于中文名称的也无法下载,GOOGLE了N次最终没有解决,只知道是文件名编码格式问题,还望朋友多多指教,小弟感激不尽。
现将直接将文件下载到本地硬盘的代码如下:
一、创建JAVA类,部分代码没有上传,因没有测试过,以后有机会再给大家上传
package ftp;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.StringTokenizer;
import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;
public class FtpFile {
String serverIp = "192.168.12.49";
String serverUser = "admin";
String serverPwd = "admin";

FtpClient aftp;
DataOutputStream outputs;
TelnetInputStream ins;
TelnetOutputStream outs;
int ch;
public String a;
String hostname = "";
private String path = "/";

public FtpClient connect(String RWFileDir, String hostname, int port,
String uid, String pwd) {
/*
* this.hostname = hostname;
* System.out.println("正在连接"+hostname+",请等待....."); try{ aftp = new
* FtpClient(hostname,port); aftp.login(uid,pwd); aftp.binary();
* //aftp.openPortDataConnection(); a = "连接主机:"+hostname+"成功!";
* System.out.println(a); } catch(FtpLoginException e){
* a="登陆主机:"+hostname+"失败!请检查用户名或密码是否正确:"+e; System.out.println(a);
* //return false; } catch (IOException e){
* a="连接主机:"+hostname+"失败!请检查端口是否正确:"+e; System.out.println(a); //return
* false; } catch(SecurityException e) {
* a="无权限与主机:"+hostname+"连接!请检查是否有访问权限:"+e; System.out.println(a);
* //return false; }
*/
// log(RWFileDir,a);
FtpClient ftpClient = null;
try {
ftpClient = new FtpClient();
// 创建FtpClient对象
ftpClient.openServer(hostname);
// 连接FTP服务器
ftpClient.login(uid, pwd);
// 登录FTP服务器
aftp = ftpClient;
aftp.cd(RWFileDir);
} catch (IOException ex) {
;
}
return ftpClient;
}
public void stop(String RWFileDir) {
String message = "";
try {
if (aftp != null) {
aftp.closeServer();
message = "与主机" + hostname + "连接已断开!";
System.out.println(message);
//log(RWFileDir, message);
}
} catch (IOException e) {
message = "与主机" + hostname + "断开连接失败!" + e;
System.out.println(message);
log(RWFileDir, message);
}
}



public void showFileContents(String strdir) {
StringBuffer buf = new StringBuffer();
try {
aftp.cd(strdir);
ins = aftp.list();
while ((ch = ins.read()) >= 0) {
buf.append((char) ch);
}
System.out.println("buf-------------" + buf.toString());
ins.close();
} catch (IOException e) {
}
}
// 返回当前目录的所有文件及文件夹
public ArrayList getFileList() throws IOException {
BufferedReader dr = new BufferedReader(new InputStreamReader(aftp
.list()));
ArrayList a1 = new ArrayList(); // 存放文件
// ArrayList a2= new ArrayList(); //存放文件夹
ArrayList a3 = new ArrayList(); // 存放文件夹详细资料
// ArrayList a4= new ArrayList(); //存放文件夹下其它文件夹下的文件
ArrayList a5 = new ArrayList(); // 存放文件夹下其它文件夹下的文件
String s = "";
// Hashtable ha=new Hashtable();
// ha=null;
while ((s = dr.readLine()) != null) {
if (isFile(s)) {
// a4.clear();
// a4.remove(0);
// a4=null;
ArrayList a4 = new ArrayList(); // 存放文件夹下其它文件夹下的文件
a4.add(parseLine(s).get(8).toString());
a4.add("文件");
a4.add(parseLine(s).get(4).toString() + "bytes");
a3.add(a4);
}
else if (isDir(s)) {
// a2.add(parseLine(s).get(8));
// showFileContents(s);
// a3.add(parseLine(s));
// System.out.println("ssssssss:"+s);
// a4.add(getNameList(s));
// a2.clear();
// a2.remove(0);
// a2=null;
String tem = parseLine(s).get(8).toString();
if ((tem.trim().equals(".")) || (tem.trim().equals(".."))) {
} else {
ArrayList a2 = new ArrayList(); // 存放文件夹
a2.add(parseLine(s).get(8).toString());
// a2.add("nbsp;");
a2.add("文件夹");
a2.add(parseLine(s).get(4).toString() + "bytes");
a1.add(a2);
}
}
// a1.add(parseLine(s).get(8));
// a1.add(s);
// System.out.println("xxxxxxxxxxxxxxxxx:"+parseLine(s).get(8));
// a1.addAll(a2);
}
a5.add(a1);
a5.add(a3);
dr.close();
aftp.closeServer();
return a5;
}
public void setPath(String path) throws IOException {
if (aftp == null)
this.path = path;
else {
aftp.cd(path);
}
}
// 返回当前目录的文件名称
public ArrayList getNameList(String RWFileDir) throws IOException {
// System.out.println("xxxxxxx--------------111111111");
BufferedReader dr = new BufferedReader(new InputStreamReader(aftp
.nameList(RWFileDir)));
// System.out.println("xxxxxxx---------------22222222222");
// System.out.println(dr.readLine().toString()+"ddddddddd");
ArrayList al = new ArrayList();
String s = "";
int j = 0;
while ((s = dr.readLine()) != null) {
System.out.println(s);
al.add(s);
j++;
// s = s.substring(13,s.length());
isFile(s);
// downloadFile(RWFileDir,s);
// String strFileDelF = aftp.nameList("subunsubtosp//");
// File fileDelF=new File(s);
// fileDelF.delete();
}
System.out.println("xxxxxxxxxxxx" + j);
return al;
// System.out.println(al.add(s));
}
// 判断一行文件信息是否为目录
public boolean isDir(String line) {
return ((String) parseLine(line).get(0)).indexOf("d") != -1;
}
public boolean isFile(String line) {
return !isDir(line);
}
// 处理getFileList取得的行信息
private ArrayList parseLine(String line) {
ArrayList s1 = new ArrayList();
StringTokenizer st = new StringTokenizer(line, " ");
while (st.hasMoreTokens()) {
s1.add(st.nextToken());
}
return s1;
}
// 写消息日志
public static void log(String RWFileDir, String msg) {
String message = "";
try {
java.text.DateFormat df = new java.text.SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
java.text.DateFormat dflog = new java.text.SimpleDateFormat(
"yyyyMMdd");
java.util.Date date = new java.util.Date();
String datestr = df.format(new java.util.Date());
String datelog = dflog.format(new java.util.Date());
// String datelog = datestr.substring(0,10);
// datelog = datelog.replace('-',' ');
// 按日期每天生成一个日志文件
FileWriter fwl = new FileWriter(RWFileDir + "CMSSftp" + datelog
+ ".log", true);
PrintWriter outl = new PrintWriter(fwl);
outl.println(datestr + "  " + msg);
outl.close();
fwl.close();
} catch (IOException e) {
message = "写log文件错误!" + e;
e.printStackTrace();
log(RWFileDir, message);
System.out.println(message);
}
}
}

二、创建jsp列表文件main.jsp:
<%@ page language="java" contentType="text/html; charset=GB2312"%>
<%@ page import="java.io.IOException.*"%>
<%@ page import="java.io.IOException,sun.net.TelnetInputStream,sun.net.ftp.FtpClient"%>
<%@ page import="ftp.*"%>
<%@ page import="java.util.ArrayList;"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean"
prefix="bean"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html"
prefix="html"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>主页面</title>
<meta content="text/html; charset=gb2312" http-equiv="Content-Type">
<link rel="stylesheet" type="text/css" href="css/list.css">
</head>
<body>
<form id='list' name='list' action='post'>
菜单
<table border=0>
<tr>
<td>
<html:link forward="insert">
新增记录
</html:link>
</td>
</tr>
<tr>
<td>
<html:link forward="login">
修改记录
</html:link>
</td>
</tr>
<tr>
<td>
<html:link forward="search">
查询记录
</html:link>
</td>
</tr>
<tr>
<td>
<html:link forward="display">
显示全部
</html:link>
</td>
</tr>
<tr>
<td>
<html:link forward="logout">
退出系统
</html:link>
</td>
</tr>
<tr>
</table>
<%
// String server=serverEdit.getText();
String server = "192.168.12.49";
// 输入的FTP服务器的IP地址
// String user=userEdit.getText();
String user = "admin";
// 登录FTP服务器的用户名
// String password=passwordEdit.getText();
String password = "admin";
// 登录FTP服务器的用户名的口令
// String path=pathEdit.getText();
String temppath = null;
String path1 = null;
//session.removeAttribute("path");
//session.removeAttribute("filename");
String path = request.getParameter("path");
//String path=new String((request.getParameter("path")).getBytes("ISO-8859-1"), "GBK");
//String path=request.getAttribute("test").toString();
if ((path == null) || (path.length() < 1)) {
path = "/";
path1 = "/";
} else {
path = new String(path.getBytes("ISO-8859-1"), "GBK"); //防止出现乱码
//path = "/" + temppath;
//path1="/"+temppath;
}
//out.println("<script language='javascript'>alert('"+path+"')</script>");
// FTP服务器上的路径
System.out.println("eeee");
ArrayList arr = new ArrayList();
ArrayList arr1 = new ArrayList();
ArrayList arr2 = new ArrayList();
ArrayList arr3 = new ArrayList();
//Hashtable ha=new Hashtable();
FtpFile ft = null;
try {
ft = new FtpFile();
ft.connect(path, server, 21, user, password);
//arr = ft.getNameList(path);
//System.out.println("xxxxxxxxxxxxxxxxxxx");
arr = ft.getFileList();
} catch (Exception ex) {
System.out.println("eeeeeeeeeeeeeeeeeeeeeeeeeeee");
}
arr1 = (ArrayList) arr.get(0);
arr2 = (ArrayList) arr.get(1);
//arr2=(ArrayList)ha.get("file");
//System.out.println(arr1.toString());
//out.println(arr1.size()+"            ");
out.print("当前位置:" + path);
//session.setAttribute("path",path);
out
.print("<p align='center'><input type='button' value='返回上一页' onClick='history.go(-1)'></p>");
out
.println("<table border=0 cellPadding='5' cellSpacing='2' class='listtable' align='center' style='width:80%'><tr class='firstline'><td width='200px'align='center'>文件名</td><td width='60px' align='center'>类型</td><td width='100' align='center'>大小</td><td align='center'>下载</td></tr>");
for (int i = 0; i < arr1.size(); i++) { //取出文件夹
//tempStr += arr.get(i).toString();
arr3 = (ArrayList) arr1.get(i);
out.print("<tr class='line'>");
for (int j = 0; j < arr3.size(); j++) {
out.print("<td>");
String tempstr = arr3.get(j).toString();
if (j == 0) {
if (path.length() > 1) {
out.print("<a href='main.jsp?path=" + path + "/"
+ tempstr + "'>" + tempstr + "</a>");
} else {
out.print("<a href='main.jsp?path=" + path
+ tempstr + "'>" + tempstr + "</a>");
}
} else {
out.print(tempstr);
}
out.print("</td>");
}
out.print("<td>&nbsp;</td></tr>");
}
String filename = null;
for (int i = 0; i < arr2.size(); i++) { //取出文件
//tempStr += arr.get(i).toString();
arr3 = (ArrayList) arr2.get(i);
out.print("<tr class='line'>");
for (int j = 0; j < arr3.size(); j++) {
out.print("<td>");
String tempstr = arr3.get(j).toString();
if (j == 0) {
filename = tempstr;
//out.print("<a href='#' onClick='selecturl();return false;'</a>" + tempstr);
out.print("<a href='downloadfile.jsp?path=" + path
+ "&filename=" + filename + "'>" + tempstr
+ "</a>");
//session.setAttribute("filename",filename);
} else {
out.print(tempstr);
}
out.print("</td>");
}
out
.print("<td width='100px' align='center'><a href='downloadfile.jsp?path="
+ path
+ "&filename="
+ filename
+ "'>下载</a></td></tr>");
//out.print("<td width='100px' align='center'><a href='#' onclick='selecturl();return false;'>下载</a></td></tr>");
}
out.print("</table>");
//messageOut = tempStr.toCharArray();
//out.println(tempStr+"cccc");
//out.println(messageOut.toString()+"ddddddddddd");
ft.stop(path);
ft = null;
%>
</form>
</body>
<script language='javascript'>
function selecturl()
{
//alert("xxxx");

}
</script>
</html>

三、创建downloadfile.jsp文件,以下载FTP上的文件,注意此文件要到网站下载edtftpj-1.5.4.jar放到lib目录下,网址:http://www.enterprisedt.com/,相关代码如下:
<%@ page contentType="text/html; charset=GBK"%>
<%@ page language="java" import="java.io.IOException" pageEncoding="GBK"%>
<%@ page import="com.enterprisedt.net.ftp.FTPClient"%>
<%@ page import="com.enterprisedt.net.ftp.FTPTransferType"%>
<%@ page import="java.io.*,com.enterprisedt.net.ftp.FTPConnectMode;"%>
<html>
<head>
<title>主页面</title>
</head>
<body>
<%
String path = null;
String filename = null;
path = request.getParameter("path");
filename = request.getParameter("filename");
//response.setContentType("application/unknown");//设置为下载application/x-download
//其中%20是空格在UTF-8下的编码
//filename = URLEncoder.encode(filename, "UTF-8");
//filename = new String(filename.getBytes("gb2312"),"ISO8859-1");
//response.setHeader("Content-Disposition", "attachment; filename=/"" + filename + "/";");
String host = "192.168.12.49";
String users = "admin";
String passwords = "admin";
if (path.trim().length() > 1) {
path = path.trim() + "/";
}
String remoteFile = path + filename; //确定源文件的位置
String downFile = "d:/" + filename; //确定源文件的位置
System.out.println(remoteFile + "  正在下载中,请稍等................");
try {
OutputStream outputStream = response.getOutputStream();
FTPClient client = new FTPClient();
client.setRemoteHost(host);
//client.setDetectTransferMode(true);
client.connect();
client.login(users, passwords);
client.setConnectMode(FTPConnectMode.ACTIVE);
client.setType(FTPTransferType.BINARY);
//client.get(outputStream, remoteFile); //*方式一:将ftp上的文件取出后,写入到response(outputStream),以response把文件带到浏览器,由浏览器来提示用户是否愿意保存文件到本
//*一直存在中文文件名没有解决的问题
client.get(downFile, remoteFile); //*方式二:将FTP上文件取出后,直接下载到D盘下
outputStream.close();
client.quit();
} catch (IOException e) {
e.printStackTrace();
}
%>
</body>
</html>


  http://blog.csdn.net/xiaoxiaohai123/article/details/1666511

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-228167-1-1.html 上篇帖子: Commons net实现 FTP上传下载 下篇帖子: 解析Ftp协议的两种工作模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表