`
huibin
  • 浏览: 737564 次
  • 性别: 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服务器上传下载文件

    java+jsp代码实现从FTP服务器上传下载文件。 里面给了java方法和jsp页面的代码。主要是实现从FTP服务器上面下载文件到自己本地文件夹下面。另外还给了几个网站供大家参考。

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

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

    jsp版本ftp文件上传与下载

    jsp版的ftp文件上传与下载,可以直接运行程序,并解决了文件名为中文时的乱码问题

    FTP上传文件控件(jsp)

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

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

    一个开放的文件下载服务

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

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

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

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

    用Java实现FTP批量大文件上传下载

    用Java实现FTP批量大文件上传下载特别详细的思路,下载

    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版本的,过一段时间我会发上来...

    Jsp+Servlet实现文件上传下载 文件上传(一)

    主要为大家详细介绍了Jsp+Servlet实现文件上传下载中的第一部分文件上传,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    火狐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文件...

    JAVA技术实现上传下载文件到FTP服务器(完整)

    主要介绍了JAVA技术实现上传下载文件到FTP服务器(完整),本文使用 Apache Jakarta Commons Net(commons-net-3.3.jar) 基于FileZilla Server服务器实现FTP服务器上文件的上传/下载/删除等操作,需要的朋友可以参考下

    上传,页面预览,ftp传输

    3.代码中包含ftp文件传输至服务器代码(因为公司要求是将附件传输到 文件服务器) 使用注意: 需要注意文件路径配置文件file.properties (自己找不到就别赖我了...) 预览功能使用的是项目中的 yuLanFile文件夹...

    火狐WEB文件管理器(附加JSP探针).zip

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

    规则引擎-FTP上传

    我们可以把已完成的规则包、jsp页面可以上传到规则服务器(规则管理系统)上,这种...但是有时我们服务器上需要的是完整的规则包、jsp页面、规则包的RSC文件,这时候我们就可以用规则配置器中“FTP上传”的功能去实现。

    关于ftp下显示的时间和系统时间不一致的解决方法

    您可能感兴趣的文章:javascript 显示当前系统时间代码Android开发技巧之永不关闭的Toast信息框(长时间显示而非系统关闭)js显示当前系统时间的代码C#中动态显示当前系统时间的实例方法jsp实现页面实时显示当前系统...

    java使用ftp上传文件示例分享

    主要介绍了java使用ftp上传文件示例,需要的朋友可以参考下

    hudson的ftp上传插件无法正常使用问题的处理

    1 只能选择当前构建项目目录下的文件,无法支持上传在这个项目上下文环境之外的文件 2 实际上根本没有上传到指定的目录下,总是上传到ftp用户的根目录 3 有些环境下没有错误但是上传文件没有成功

Global site tag (gtag.js) - Google Analytics