小弟是用 SERV-U的服务器!昨天小弟在网上找了一天的资料 还没有解决。现在高分200分悬赏,JSP - FTP  上传下载实例! 请各位大侠帮忙!!!!!!!!!!!!!!!!!!!!!!!!!!!!!SOS!小弟邮箱 [email protected]!!!!  最好是纯的简单实例。当然做的好看最好行!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@@@@@@@@@@!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    是JSP- FTP  不是JAVA(gui)-FTP
      

  2.   

    http://www.cnblogs.com/cotty/archive/2010/08/12/1798321.html看看这个 实例
    希望对你有帮助
      

  3.   

    java net包中有专门的ftp上传下载。jsp页面没有上传或者下载,应该是在action中进行处理。
      

  4.   

    <% conn co=new conn();
      String id=request.getParameter("xz_id");
      String sql="select * from tb_xz where id="+id;
      ResultSet rs=co.query(sql);
      String name="";
      String src="";
      if(rs.next()){
       name=rs.getString("name")+".xsl";
       src=rs.getString("src");
       System.out.println(name);
       System.out.println(src);
      }
      //关于文件下载时采用文件流输出的方式处理: 
         //加上response.reset(),并且所有的%>后面不要换行,包括最后一个; 
         //因为Application Server在处理编译jsp时对于%>和<%之间的内容一般是原样输出,而且默认是PrintWriter, 
         //而你却要进行流输出:ServletOutputStream,这样做相当于试图在Servlet中使用两种输出机制, 
         //就会发生:getOutputStream() has already been called for this response的错误 
         //详细请见《More Java Pitfill》一书的第二部分 Web层Item 33:试图在Servlet中使用两种输出机制 270 
         //而且如果有换行,对于文本文件没有什么问题,但是对于其它格式,比如AutoCAD、Word、Excel等文件 
         //下载下来的文件中就会多出一些换行符0x0d和0x0a,这样可能导致某些格式的文件无法打开,有些也可以正常打开。 
         response.reset();//可以加也可以不加 
         response.setContentType("application/x-download");//设置为下载application/x-download 
         // /../../退WEB-INF/classes两级到应用的根目录下去,注意Tomcat与WebLogic下面这一句得到的路径不同,WebLogic中路径最后没有/ 
         System.out.println(this.getClass().getClassLoader().getResource("/").getPath()+"../../upload"); 
         System.out.println("!!!!!!!!"+request.getSession().getServletContext().getRealPath("/")+"!!!!!!!!");
         String filenamedownload = request.getSession().getServletContext().getRealPath("/") + "upload/"+src; 
         String filenamedisplay = name;//系统解决方案.txt 
         filenamedisplay = URLEncoder.encode(filenamedisplay,"UTF-8"); 
         response.addHeader("Content-Disposition","attachment;filename=" + filenamedisplay); 
         OutputStream output = null; 
         FileInputStream fis = null; 
         try 
         { 
             output   = response.getOutputStream(); 
             fis = new FileInputStream(filenamedownload); 
             byte[] b = new byte[1024]; 
             int i = 0; 
             while((i = fis.read(b)) > 0) 
             {     output.write(b, 0, i); 
             } 
             output.flush(); 
         } 
         catch(Exception e) 
         { 
             System.out.println("Error!"); 
            
         } 
         finally 
         { 
             if(fis != null) 
             { 
                 fis.close(); 
                 fis = null; 
             } 
             if(output != null) 
             { 
                 output.close(); 
                 output = null; 
             } 
         } 
    %>
      

  5.   

    上传
    package servlet;
    import java.io.IOException;
    import java.util.Date;
    import java.util.Hashtable;
    import javabean.conn;import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import javazoom.upload.MultipartFormDataRequest;
    import javazoom.upload.UploadBean;
    import javazoom.upload.UploadException;
    import javazoom.upload.UploadFile;
    public class AddProduct extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    doPost( request,  response); } public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException { response.setContentType("text/html");
    request.setCharacterEncoding("UTF-8"); MultipartFormDataRequest mrequest=null;
    try {
    mrequest = new MultipartFormDataRequest(request,null,100*1024*1024,MultipartFormDataRequest.COSPARSER,"UTF-8");
    } catch (UploadException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }


    UploadBean upBean = new UploadBean();
    String path = request.getRealPath("/upload");
    System.out.println(path+"------------------path-");
    try {
    upBean.setFolderstore(path);
    System.out.println("--------11-----");
    } catch (UploadException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }//上传到哪
    upBean.setParser(MultipartFormDataRequest.CFUPARSER);
    upBean.setParsertmpdir("c:/temp");
    String picture = new Date().toLocaleString()+(int)(Math.random()*1000);
    picture = picture.replace(" ", "");
    picture = picture.replace(":", "");
    picture = picture.replace("-", "");
    Hashtable files = mrequest.getFiles();
    System.out.println("------222------");
                   UploadFile file = (UploadFile) files.get("picture");
                   String name = file.getFileName();
                   
                   if(name.endsWith(".jpg")||name.endsWith(".JPG")){
                    picture += ".jpg";
                   }else if(name.endsWith(".bmp")||name.endsWith(".bmp")){
                    picture += ".bmp";
                   }else if(name.endsWith(".gif") || name.endsWith(".GIF")){
                    picture += ".gif";
                   }else if(name.endsWith(".png") || name.endsWith(".PNG")){
                    picture += ".png";
                   }else {
                   
                    request.setAttribute("mess", "上传的文件格式有误");
                    request.getRequestDispatcher("addpro.jsp").forward(request, response);
                    return ;
                   }
                   System.out.println("------33-------");
                   try {
                    file.setFileName(picture);
       upBean.store(mrequest, "picture");
    } catch (UploadException e) {
    e.printStackTrace();
    }

    String product = mrequest.getParameter("product");
    System.out.println("-------4------");
    conn cn = new conn();
    Date date = new Date();
    String sql = "insert into pictrue(name,pictrue) values('"+product+"','"+picture+"')";
    System.out.println(sql+"-----5--------");
    cn.update(sql);
    try {
    cn.close();
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    request.setAttribute("mess", "上传成功");
    request.getRequestDispatcher("addpro.jsp").forward(request, response);



         

    }
    }
      

  6.   

    上传: 
    <html> 
    <head> 
    <title>文件上传 </title> 
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
    </head> 
    <body> 
    <p>  </p> 
    <p align="center">上传文件选择 </p> 
    <FORM METHOD="POST" ACTION="doupload.jsp" 
    ENCTYPE="multipart/form-data"> 
    <input type="hidden" name="TEST" value="good"> 
    <table width="75%" border="1" align="center"> 
    <tr> 
    <td> <div align="center">1、 
    <input type="FILE" name="FILE1" size="30"> 
    </div> </td> 
    </tr> 
    <tr> 
    <td> <div align="center"> 
    <input type="submit" name="Submit" value="上传它!"> 
    </div> </td> 
    </tr> 
    </table> 
    </FORM> 
    </body> 
    </html> <%@ page contentType="text/html; charset=gb2312" language="java" 
    import="java.util.*,com.jspsmart.upload.*" errorPage="" %> 
    <html> 
    <head> 
    <title>文件上传处理页面 </title> 
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
    </head> <body> 
    <% 
    // 新建一个SmartUpload对象 
    SmartUpload su = new SmartUpload(); 
    // 上传初始化 
    su.initia lize(pageContext); 
    // 设定上传限制 
    // 1.限制每个上传文件的最大长度。 
    // su.setMaxFileSize(10000); 
    // 2.限制总上传数据的长度。 
    // su.setTotalMaxFileSize(20000); 
    // 3.设定允许上传的文件(通过扩展名限制),仅允许doc,txt文件。 
    // su.setAllowedFilesList("doc,txt"); 
    // 4.设定禁止上传的文件(通过扩展名限制),禁止上传带有exe,bat, 
    jsp,htm,html扩展名的文件和没有扩展名的文件。 
    // su.setDeniedFilesList("exe,bat,jsp,htm,html,,"); 
    // 上传文件 
    su.upload(); 
    // 将上传文件全部保存到指定目录 
    int count = su.save("/upload"); 
    out.println(count+"个文件上传成功! <br>"); // 利用Request对象获取参数之值 
    out.println("TEST="+su.getRequest().getParameter("TEST") 
    +" <BR> <BR>"); // 逐一提取上传文件信息,同时可保存文件。 
    for (int i=0;i <su.getFiles().getCount();i++) 

    com.jspsmart.upload.File file = su.getFiles().getFile(i); // 若文件不存在则继续 
    if (file.isMissing()) continue; // 显示当前文件信息 
    out.println(" <TABLE BORDER=1>"); 
    out.println(" <TR> <TD>表单项名(FieldName) </TD> <TD>" 
    + file.getFieldName() + " </TD> </TR>"); 
    out.println(" <TR> <TD>文件长度(Size) </TD> <TD>" + 
    file.getSize() + " </TD> </TR>"); 
    out.println(" <TR> <TD>文件名(FileName) </TD> <TD>" 
    + file.getFileName() + " </TD> </TR>"); 
    out.println(" <TR> <TD>文件扩展名(FileExt) </TD> <TD>" 
    + file.getFileExt() + " </TD> </TR>"); 
    out.println(" <TR> <TD>文件全名(FilePathName) </TD> <TD>" 
    + file.getFilePathName() + " </TD> </TR>"); 
    out.println(" </TABLE> <BR>"); // 将文件另存 
    // file.saveAs("/upload/" + myFile.getFileName()); 
    // 另存到以WEB应用程序的根目录为文件根目录的目录下 
    // file.saveAs("/upload/" + myFhttp://topic.csdn.net/u/20080908/09/AFEC1526-798D-4226-A50A-4CC009B5E5D3.htmlile.getFileName(), 
    su.SAVE_VIRTUAL); 
    // 另存到操作系统的根目录为文件根目录的目录下 
    // file.saveAs("c:\\temp\\" + myFile.getFileName(), 
    su.SAVE_PHYSICAL); } 
    %> 
    </body> 
    </html> 
      

  7.   

    下载: <html> 
    <head> 
    <title>下载 </title> 
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
    </head> 
    <body> 
    <a href="jsp/do_download.jsp">点击下载 </a> 
    </body> > </html> do_download.jsp: 
    <%@ page contentType="text/html;charset=gb2312" 
    import="com.jspsmart.upload.*" %> <% 
    // 新建一个SmartUpload对象 
    SmartUpload su = new SmartUpload(); 
    // 初始化 
    su.initialize(pageContext); 
    // 设定contentDisposition为null以禁止浏览器自动打开文件, 
    //保证点击链接后是下载文件。若不设定,则下载的文件扩展名为 
    //doc时,浏览器将自动用word打开它。扩展名为pdf时, 
    //浏览器将用acrobat打开。 
    su.setContentDisposition(null); 
    // 下载文件 
    su.downloadFile("/upload/如何赚取我的第一桶金.doc"); 
    %> 
    注意,执行下载的页面,在Java脚本范围外(即 <% ... %>之外),不要包含HTML代码、空格、回车或换行等字符,有的话将不能正确下载。不信的话,可以在上述源码中%> <%之间加入一个换行符,再下载一下,保证出错。因为它影响了返回给浏览器的数据流,导致解析出错。 3、如何下载中文文件 jspSmartUpload虽然能下载文件,但对中文支持不足。若下载的文件名中有汉字,则浏览器在提示另存的文件名时,显示的是一堆乱码,很扫人兴。上面的例子就是这样。 为了给jspSmartUpload组件增加下载中文文件的支持,我对该组件进行了研究,发现对返回给浏览器的另存文件名进行UTF-8编码后,浏览器便能正确显示中文名字了。这是一个令人高兴的发现。于是我对jspSmartUpload组件的SmartUpload类做了升级处理,增加了toUtf8String这个方法,改动部分源码如下: public void downloadFile(String s, String s1, String s2, int i) 
    throws ServletException, IOException, SmartUploadException 

    if(s == null) 
    throw new IllegalArgumentException("File '" + s +"' not found (1040)."); 
    if(s.equals("")) 
    throw new IllegalArgumentException("File '" + s + 
    "' not found (1040)."); 
    if(!isVirtual(s) && m_denyPhysicalPath) 
    throw new SecurityException("Physical path is 
    denied (1035)."); 
    if(isVirtual(s)) 
    s = m_application.getRealPath(s); 
    java.io.File file = new java.io.File(s); 
    FileInputStream fileinputstream = new FileInputStream(file); 
    long l = file.length(); 
    boolean flag = false; 
    int k = 0; 
    byte abyte0[] = new byte[i]; 
    if(s1 == null) 
    m_response.setContentType("application/x-msdownload"); 
    else 
    if(s1.length() == 0) 
    m_response.setContentType("application/x-msdownload"); 
    else 
    m_response.setContentType(s1); 
    m_response.setContentLength((int)l); 
    m_contentDisposition = m_contentDisposition != null ? 
    m_contentDisposition : "attachment;"; 
    if(s2 == null) 
    m_response.setHeader("Content-Disposition", 
    m_contentDisposition + " filename=" + 
    toUtf8String(getFileName(s))); 
    else 
    if(s2.length() == 0) 
    m_response.setHeader("Content-Disposition", 
    m_contentDisposition); 
    else 
    m_response.setHeader("Content-Disposition", 
    m_contentDisposition + " filename=" + toUtf8String(s2)); 
    while((long)k < l) 

    int j = fileinputstream.read(abyte0, 0, i); 
    k += j; 
    m_response.getOutputStream().write(abyte0, 0, j); 

    fileinputstream.close(); 
    } /** 
    * 将文件名中的汉字转为UTF8编码的串,以便下载时能正确显示另存的文件名. 
    * @param s 原文件名 
    * @return 重新编码后的文件名 
    */ 
    public static String toUtf8String(String s) { 
    StringBuffer sb = new StringBuffer(); 
    for (int i=0;i <s.length();i++) { 
    char c = s.charAt(i); 
    if (c >= 0 && c <= 255) { 
    sb.append(c); 
    } else { 
    byte[] b; 
    try { 
    b = Character.toString(c).getBytes("utf-8"); 
    } catch (Exception ex) { 
    System.out.println(ex); 
    b = new byte[0]; 

    for (int j = 0; j < b.length; j++) { 
    int k = b[j]; 
    if (k < 0) k += 256; 
    sb.append("%" + Integer.toHexString(k). 
    toUpperCase()); 



    return sb.toString(); 
    } 注意源码中粗体部分,原jspSmartUpload组件对返回的文件未作任何处理,现在做了编码的转换工作,将文件名转换为UTF-8形式的编码形式。UTF-8编码对英文未作任何处理,对中文则需要转换为%XX的形式。toUtf8String方法中,直接利用Java语言提供的编码转换方法获得汉字字符的UTF-8编码,之后将其转换为%XX的形式。 将源码编译 后打包成jspSmartUpload.jar,拷贝到Tomcat的shared/lib目录下(可为所有WEB应用程序所共享),然后重启Tomcat服务器就可以正常下载含有中文名字的文件了。另,toUtf8String方法也可用于转换含有中文的超级链接,以保证链接的有效,因为有的WEB服务器不支持中文链接。 
      

  8.   

    commons-net-ftp-2.0.jar 包
    private FTPClient client = null; //操作类
    ---登陆
    client.setControlEncoding("GBK");// 设置登陆编码格式
    client.setConnectTimeout(60000);// 超时60秒
    client.connect(host.trim(), port);// 连接FTP
    --下载
    client.setFileType(FTP.BINARY_FILE_TYPE);//设置为二进制传输
    if(lff.getIsFileExists(file)){//判断本地文件是否存在,如果存在并且长度小于FTP文件的长度时断点续传;返之新增
    long size = this.getSize(pathName);
    long localFileSize = lff.getSize(file);
    if(localFileSize > size){
    return false;
    }
    out = new FileOutputStream(file,true);
    client.setRestartOffset(localFileSize);
    flag = client.retrieveFile(new String(pathName.getBytes(),client.getControlEncoding()),out);

    out.flush();
    } else{
    out = new FileOutputStream(file);
    flag = client.retrieveFile(new String(pathName.getBytes(),client.getControlEncoding()),out);

    out.flush();
    }