`
huibin
  • 浏览: 756754 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

jsp如何下载FTP上的文件 .

    博客分类:
  • FTP
 
阅读更多
一共两段程序,可对比一下找出区别

①---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

分享到:
评论

相关推荐

    java+jsp代码实现从FTP服务器上传下载文件

    - 使用JavaScript函数改变当前窗口的位置为FTP文件的URL,从而实现文件下载。 ```javascript function fileDown() { var url = 'ftp://' + audioFtpUser + ':' + audioFtpPwd + '@' + audioServerIP + ':' + ...

    jsp版本ftp文件上传与下载

    本教程将深入讲解如何使用JSP实现FTP文件上传与下载功能,并解决中文文件名的乱码问题。 首先,我们需要理解FTP的基本工作原理。FTP允许用户在客户端和服务器之间交换文件,通常涉及登录、文件传输、目录浏览等操作...

    JAVA中的FtpClient与FTPClient,并实现jsp面下载ftp服务器上的文件.docx

    本文将详细介绍Java中两种不同的FTP客户端库——`FtpClient`与`FTPClient`,并给出具体的示例代码来实现JSP页面下载FTP服务器上的文件功能。 #### 二、FtpClient与FTPClient对比 在开始之前,我们需要明确两个概念...

    Go-一个开放的文件下载服务

    本文将围绕“Go-一个开放的文件下载服务”这一主题,深入探讨如何利用Go语言构建一个高性能的文件下载服务,并结合“snail-master”这一项目名称,推测这是一个关于慢速爬虫或速度控制的下载服务示例。 首先,我们...

    FTP上传文件控件(jsp)

    通过jsp页面运用FTP服务器上传文件到tomcat服务器,传统的上传文件是用input页面控件,局限于不能上传多个文件。本控件可上传多个文件。解压后external\ImportFtp.htm内有FTP接口说明。

    java-jsp-upload-and-download.rar_ftp java_ftp jsp_jsp FTP

    本教程将深入探讨如何结合Java、JSP和FTP来实现文件的上传与下载功能,这对于构建具有文件管理功能的Web应用至关重要。 首先,我们需要理解Java中的FTP客户端库。Java标准库并不直接支持FTP,但我们可以使用第三方...

    基于strurs2文件上传,利用FTP将文件直接上传至指定的FTP服务器

    在JSP页面上,我们可以使用Struts2的`&lt;s:form&gt;`和`&lt;s:file&gt;`标签来创建文件上传表单: ```jsp 选择文件" /&gt; 上传" /&gt; ``` 当用户提交表单时,Struts2框架会自动处理文件上传,并将其传递给Action。 在实际开发...

    火狐WEB文件管理器(JSP编写) JSP探针.rar

    这是一个使用JSP编写的WEB文件管理器,在JDK1.5和Tomcat5.5上测试通过。可对网站上的目录和文件进行读、写、删除和上载等操作...如果你所在的环境不能使用FTP,那么可以使用本工具上载你你所修改的JSP代码和其它文件。

    war-ftp1.65-main.zip

    FTP(File Transfer Protocol)是互联网上用于在不同计算机之间传输文件的标准协议,它允许用户从一台计算机上传或下载文件到另一台计算机。这个压缩包很可能是某个特定FTP服务器软件的发行版,例如vsftpd、ProFTPD...

    远程JSP服务器文件管理工具WEB工程源码

    我们租用虚拟主机或者建立自己企业的服务器的时候经常会遇到文件管理的问题, 用 FTP 方式固然方便, 不过总是需要用一个 FTP 终端软件来管理, 而这个工具可以帮你只要有浏览器, 就可以方便的操作服务器上的文件.

    JAVA FTP下载 程序——源代码

    - 此方法用于从 FTP 服务器上下载文件。 - 具体的文件下载逻辑未给出,通常涉及打开文件、读取数据等操作。 #### 关闭 FTP 连接 ```java public void stop(String RWFileDir) { String message = ""; try { if ...

    FTP源代码例子

    path:FTP服务器上的路径 ftpClient = new FtpClient(); ftpClient.openServer(server); ftpClient.login(user, password); //path是ftp服务下主目录的子目录 if (path.length() != 0) ftpClient.cd(path); /...

    FTP上传(JSP/HTML嵌入)

    在web应用中,大文件的上传多是用FTP协议实现的!--而FTP的上传需要客户端,大部分是用页面嵌入APPLET或其他控件的模式---这个是用Delphi实现的,直接用就可以!!! 还有个Applet版本的,过一段时间我会发上来...

    调用FtpClient类上传文件(java)

    其他提及的jar文件(如ojdbc14.jar、jsp-api.jar、dom4j-1.6.1.jar、log4j-1.2.14.jar)可能与特定的应用场景有关,但不是直接用于FTP操作。 以下是一个简单的使用`FtpClient`上传文件的Java代码示例: ```java ...

    火狐WEB文件管理器(JSP编写),附加JSP探针

    火狐WEB文件管理器(JSP编写),附加JSP探针 &lt;br&gt;这是一个使用JSP编写的WEB文件管理器,在JDK1.5和Tomcat5.5上测试通过。...如果你所在的环境不能使用FTP,那么可以使用本工具上载你你所修改的JSP代码和其它文件。

    jgrid表格展现ftp服务器文件结构

    于是就做了一个示例,使用Apache ftpClient连接ftp服务器,获取内容文件信息(文件ftp地址,文件名,文件大小,文件创建时间),将取到的ftp服务器上的所有内容信息通过jgrid以表格的形式展现出来,类似于windows文件...

    VC写的上传文件到FTP服务器的OCX控件,网页可调用

    在这个特定的控件中,开发者已经封装了FTP文件上传的功能,使得网页开发者无需深入了解FTP协议的细节,只需通过简单的API调用就能实现文件上传至FTP服务器。 FTP服务器是一个存储和管理文件的系统,它允许客户端...

    在Linux上搭建JSP+PHP环境.pdf

    本文将详细介绍如何在Linux(这里以Red Hat 9.0为例)上配置Apache服务器,使其能同时处理JSP、PHP和HTML文件。 首先,我们需要进行搭建前的准备工作。安装Linux操作系统,这里推荐使用FTP方式安装,因为它比光盘...

Global site tag (gtag.js) - Google Analytics