用JSP来完成文件的上传和下载的功能
package yuanyifileup;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.PageContext;public class yuanyifileup
{
private ServletRequest request;
private ServletResponse response;
private ServletConfig config;
ServletInputStream DATA;
int FormSize;
File f1;
FileOutputStream os;
DataInputStream is;
String filename;
byte[] b;
byte t;
boolean flag=false;
public yuanyifileup()
{ }
public void initialize(ServletConfig config,HttpServletRequest request,HttpServletResponse response) throws IOException
{
this.request=request;
this.response=response;
this.config=config;
DATA = request.getInputStream();
FormSize=request.getContentLength();
}
public void initialize(PageContext pageContext) throws IOException
{
request=pageContext.getRequest();
response=pageContext.getResponse();
config=pageContext.getServletConfig();
DATA = request.getInputStream();
FormSize=request.getContentLength();
}
public boolean setFilename(String s)
{
try
{
File f1=new File(s);
os=new FileOutputStream(f1);
}
catch(IOException e)
{return(false);}
return(true);
}
public void getByte()
{
int i=0;
try
{
is=new DataInputStream(DATA);
b=new byte[FormSize];while (true)
{
try
{
t=is.readByte();
b[i]=t;
i++;
}
catch(EOFException e)
{ break;}
}
is.close();}
catch(IOException e)
{}
}public boolean save()
{
int i=0,start1=0,start2=0;
String temp="";
if (!flag)
{
getByte();
flag=true;
}
try
{
temp=new String(b,"ISO8859_1");
}
catch(UnsupportedEncodingException e)
{return(false);}start1=temp.indexOf("image/");
temp=temp.substring(start1);start1=temp.indexOf("\r\n\r\n");temp=temp.substring(start1+4);
start2=temp.indexOf(";\r\n");
if (start2!=-1)
{
temp=temp.substring(0,start2); 
}
try
{
byte[] img=temp.getBytes("ISO8859_1");
for (i=0;i<img.length;i++)
{ os.write(img[i]); }
os.close();
}
catch(IOException e)
{return(false);}return(true);}
}

解决方案 »

  1.   

    干什么哦。你那个类是不是已经实现了上传了?
    如果非要在jsp里实现,那么就把那个类放到
    <%!%>
    里面吧,然后再调用。这也算吧?呵呵
      

  2.   

    那么麻烦干嘛,直接用jspsmartupload的了,或者用fileupload就行了。具体用法去google,很多资料的。下载的时候就是一个输出流就完了。
      

  3.   

    大家说的详细点啊!
    i am a primer!
      

  4.   

    tomcat-5.0\common\lib下的servlet放在Java\jre\lib\ext下就可以了
      

  5.   

    自己写一个javabean,在jsp中调用一下
      

  6.   

    根据HTTP协议,上传的文件是以一定的格式转换为字节流传输到WEB服务器的(该格式之前是一些标志的字符窜  xxxxx... 文件内容...xxx  (具体格式忘了,你可以查资料)从request中取得该数据流,再以规定的格式来获取文件的内容,然后才能进行存储
    你的save方法进行的就是这项工作:start1=temp.indexOf("image/");
    temp=temp.substring(start1);start1=temp.indexOf("\r\n\r\n");temp=temp.substring(start1+4);
    start2=temp.indexOf(";\r\n");
      

  7.   

    另外如果你想实现该功能的话可以不必这么麻烦,你可以用org.apache.common.FileUpload组件
    (该组件与jspSmartUpload 功能差不多? 不过今天好想上不了jspSmartUpload的网站? 难道不再维护了?)如果你是交作业的话,那就不必了,呵呵;
      

  8.   

    如何调用动态的 下载? 我要 JSPSmartUpload做的调用某个文件夹下最新的10个文件,做成下载的连接
    ----------------------------------------down_load_sample.html------------------------------------<%@include file="/internet/common.jsp" %>
    <%@ page import="java.text.SimpleDateFormat" %>
    <%@ page import="java.util.GregorianCalendar" %>
    <%
    response.setHeader("Pragma", "no-cache");
    response.setHeader("Cache-Control", "no-cache");
    response.setDateHeader("Expires", 0);
    %>
    <eos:notHavePriv packageName="D130201" prLogicName="pr.P_D130201_03_InsertPre">
    </eos:notHavePriv>
    <%
    String strnow="";
    SimpleDateFormat sDate = new SimpleDateFormat("yyyyMMdd");
    strnow = sDate.format(GregorianCalendar.getInstance().getTime());
    %>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>文件下载激活</title>
    <SCRIPT language="JavaScript" src="/internet/scripts/checkForm.js" ></SCRIPT>
    <script language="JavaScript" src="/internet/scripts/check.js"></script>
    <SCRIPT language="JavaScript" src="../../js/cmisjs.js" ></SCRIPT>
    <script language="JavaScript" src="../../js/calendar.js" ></script><style type="text/css">
    <!--
    body {
    background-image: url(../../img/Abg.gif);
    }
    .frmBg {
    background-color: #949EDE;
    }
    -->
    </style>
    <link href="../../css/css.css" rel="stylesheet" type="text/css">
    </head>
    <FORM METHOD="POST" ACTION="http://10.20.1.59:9080/COM/page/display_10.jsp"
    ENCTYPE="multipart/form-data">
    <input type="hidden" name="TEST" value="good">
    <table  border="0" align="center" cellpadding="0" cellspacing="0">
      <tr>
        <td width="20" valign="top"><img src="../../img/3.gif"></td>
        <td width="601" valign="top" background="../../img/Mb.gif" bgcolor="#949EDE"><table width="100%" height="25"  border="0" cellpadding="0" cellspacing="0">
          <tr>
            <td>&nbsp;</td>
          </tr>
        </table></td>
          <td width="17" align="right" valign="top"><img src="../../img/4.gif" width="17" height="26">
            <%@ page import="java.util.GregorianCalendar" %>
            <%
    response.setHeader("Pragma", "no-cache");
    response.setHeader("Cache-Control", "no-cache");
    response.setDateHeader("Expires", 0);
    %><eos:not
          </td>
      </tr>
      <tr>
        <td valign="top" background="../../img/Mb.gif" bgcolor="#949EDE"><br>
              <br>
            <br>
              <br>
              <br>
        </td>
        <td valign="top"  background="../../img/Mb.gif" bgcolor="#949EDE">      <table width="100%" height="346"  border="0" cellpadding="0" cellspacing="0">
            <tr>
              <td height="326" valign="top"><br>
              <table width="100%"  border="1" align="center" cellpadding="3" cellspacing="0" bordercolorlight="#333333" bordercolordark="#ffffff" bgcolor="#FFFFFF">
                    <!--DWLayoutTable-->
                    <tr> 
               <td height="24" colspan="3" bgcolor="e6e6e6" class="xl37"><div align="center"> 
                      <p align="center"><font face="黑体"><strong>CMIS下载 报文压缩文件 
                            激活页面</strong></font></div></td>
                    </tr>
                    <tr> 
                      <td height="24" colspan="3" valign="top" class="xl32"> <dict:select name="CMIS_ZCWJXX/WDLB" businTypeId="BNDICT_T_WDLB" styleClass="select" > 
                        </dict:select> </td>
                    </tr>
                    <tr> 
                  <td height="48" colspan="3" valign="top" class="xl32"> <div align="center">
           <p>请<strong>激活</strong>您要<font face="黑体"><strong>下载</strong></font>的 
                            报文压缩文件</p>
                          <p>激活后,您将获得<strong>10个</strong>最新日期的<font face="黑体"><strong>CMIS报文压缩文件</strong></font></p>
                        </div></td>
                    </tr>
                    <tr> 
                      <td height="29" colspan="3" valign="top" class="xl32"><!--DWLayoutEmptyCell-->&nbsp; </td>
                    </tr>
                    <tr> 
                      <td width="256" height="29" valign="top"><!--DWLayoutEmptyCell-->&nbsp;</td>
                      <td width="51" valign="top" class="xl32"><input type="submit" name="Submit" value="激活"> 
                      </td>
                      <td width="268" valign="top"><!--DWLayoutEmptyCell-->&nbsp;</td>
                    </tr>
                    <tr> 
                      <td height="24" colspan="3" valign="top" class="xl32"><!--DWLayoutEmptyCell-->&nbsp; </td>
                      
                    </tr>
                    <tr> 
                      <td height="24" colspan="3" valign="top" class="xl32"><!--DWLayoutEmptyCell-->&nbsp; </td>
                    </tr>
                  </table>
              <br>            <div align="center"><a href="http://10.20.1.59:9080/COM/page/S_D000101_01.jsp?">返回</a></div>
              </td>
            </tr>
        </table></td>
        <td valign="top" background="../../img/Mb.gif" bgcolor="#949EDE">&nbsp;</td>
      </tr>
      <tr>
        <td><img src="../../img/1.gif"></td>
        <td background="../../img/Mb.gif" bgcolor="#949EDE">&nbsp;</td>
        <td align="right" valign="top"><img src="../../img/2.gif"></td>
      </tr>
    </table>
    </form>
    </body>
    </html>
    -------------------------------------------------display_10.jsp--------------------------------------------
    <%@ page contentType="text/html; charset=gb2312" language="java"
             import="com.jspsmart.upload.*,java.util.*" %>
    <html>
    <head>
        <title>文件下载处理页面</title>
        <script language="JavaScript" type="text/JavaScript">
            <!--
            function MM_jumpMenu(targ,selObj,restore){ //v3.0
              eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
              if (restore) selObj.selectedIndex=0;
            }
            //-->
        </script>    <style type="text/css">    </style>    <link href="../../css/css.css" rel="stylesheet" type="text/css">
        <script language="javascript">
            function chakan() {
                liudong.action = "S_D130201_011.htm";
                liudong.submit;
            }
        </script>
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    </head><body>
    <%
        // 新建一个SmartUpload对象
        SmartUpload su = new SmartUpload();    // 初始化
        su.initialize(pageContext);    // 设定contentDisposition为null以禁止浏览器自动打开文件,
        //保证点击链接后是下载文件。若不设定,则下载的文件扩展名为
        //doc时,浏览器将自动用word打开它。扩展名为pdf时,
        //浏览器将用acrobat打开。
        su.setContentDisposition(null);    //com.jspsmart.upload.File file_down = su.getFiles().getFile(0);
        //String file_down_name=file_down.getFileName();    // 下载文件
        su.downloadFile("D:/ZXDATA/SEND/")
                ;
        //把SEND目录下的所有文件名(截取日期的8位)放入数组,以备排序
        int[] send_file_name_sort = new int[su.getFiles().getCount()];
        for (int i = 0; i < su.getFiles().getCount(); i++) {
            com.jspsmart.upload.File file_down = su.getFiles().getFile(0);
            if (file_down.isMissing()) continue;
            String file_date_msg = file_down.getFileName().substring(5, 12);
            int file_date_int = Integer.parseInt(file_date_msg);
            send_file_name_sort[i] = file_date_int;
        }
        Arrays.sort(send_file_name_sort);    //从小到大排序(日期从较早到现在) ,排在后面的日期越新
        for (int i = su.getFiles().getCount() - 1; i < su.getFiles().getCount() - 10; i--) {
            out.print("<a href=" + "\"" + "http://10.20.1.59:9080/COM/page/do_download_sample.jsp" + "\">" + send_file_name_sort[i] + "</a> ");
            out.println("<BR>");
        }%>
    </body>
    </html>
      

  9.   

    --------------------------------------------Cmis_10_down.html------------------------------------------------
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>CMIS下载报文 压缩文件</title><script language="JavaScript" type="text/JavaScript">
    <!--
    function MM_jumpMenu(targ,selObj,restore){ //v3.0
      eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
      if (restore) selObj.selectedIndex=0;
    }
    //-->
    </script><style type="text/css"></style><link href="../../css/css.css" rel="stylesheet" type="text/css">
    <script language="javascript">
      function chakan(){
       liudong.action = "S_D130201_011.htm";
    liudong.submit;
      }
    </script>
    </head>
    <body>
    <strong>以下是10个您可以下载的最新日期CMIS报文压缩文件</strong>:<br>
    <a href="http://10.20.1.59:9080/COM/page/do_download.jsp">20051208</a><br>
    <a href="http://10.20.1.59:9080/COM/page/do_download.jsp">20051207</a> <br>
    <a href="http://10.20.1.59:9080/COM/page/do_download.jsp">20051206</a> <br>
    <a href="http://10.20.1.59:9080/COM/page/do_download.jsp">20051205</a> <br>
    <a href="http://10.20.1.59:9080/COM/page/do_download.jsp">20051204</a> <br>
    <a href="http://10.20.1.59:9080/COM/page/do_download.jsp">20051203</a> <br>
    <a href="http://10.20.1.59:9080/COM/page/do_download.jsp">20051202</a> <br>
    <a href="http://10.20.1.59:9080/COM/page/do_download.jsp">20051201</a> <br>
    <a href="http://10.20.1.59:9080/COM/page/do_download.jsp">20051130</a> <br>
    <a href="http://10.20.1.59:9080/COM/page/do_download.jsp">20051129</a> <br>
    </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("D:/ZXDATA/SEND/send20061218.zip");  //文件必须存在
    %>-----------------------------------------do_download_xp.jsp---------------------------------
    <%@ page contentType="text/html; charset=gb2312" language="java"
             import="com.jspsmart.upload.*" %>
    <html>
    <head>
        <title>文件下载处理页面</title>
        <script language="JavaScript" type="text/JavaScript">
            <!--
            function MM_jumpMenu(targ,selObj,restore){ //v3.0
              eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
              if (restore) selObj.selectedIndex=0;
            }
            //-->
        </script>    <style type="text/css">    </style>    <link href="../../css/css.css" rel="stylesheet" type="text/css">
        <script language="javascript">
            function chakan() {
                liudong.action = "S_D130201_011.htm";
                liudong.submit;
            }
        </script>
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    </head><body>
    <%
        // 新建一个SmartUpload对象
        SmartUpload su = new SmartUpload();
        // 初始化
        su.initialize(pageContext);
        // 设定contentDisposition为null以禁止浏览器自动打开文件,
        //保证点击链接后是下载文件。若不设定,则下载的文件扩展名为
        //doc时,浏览器将自动用word打开它。扩展名为pdf时,
        //浏览器将用acrobat打开。
        su.setContentDisposition(null);    com.jspsmart.upload.File file_down = su.getFiles().getFile(0);
        String file_down_name=file_down.getFileName();    // 下载文件
        su.downloadFile("D:/ZXDATA/SEND/"+ file_down_name);//动态的提取可以吗     out.println("文件上传成功!<br>");    for (int i = 0; i < su.getFiles().getCount(); i++) {
            com.jspsmart.upload.File file_down = su.getFiles().getFile(0);
            if (file_down.isMissing()) continue;
            out.println("<TABLE BORDER=1>");
            out.println("<TR><TD>表单项名(FieldName)</TD><TD>"
                    + file_down.getFieldName() + "</TD></TR>");
            out.println("<TR><TD>文件长度(Size)</TD><TD>" +
                    file_down.getSize() + "</TD></TR>");
            out.println("<TR><TD>文件名(FileName)</TD><TD>"
                    + file_down.getFileName() + "</TD></TR>");
            out.println("<TR><TD>文件扩展名(FileExt)</TD><TD>"
                    + file_down.getFileExt() + "</TD></TR>");
            out.println("<TR><TD>文件全名(FilePathName)</TD><TD>"
                    + file_down.getFilePathName() + "</TD></TR>");
            out.println("</TABLE><BR>");
        }
    %><a href="download.html">返回----CMIS下载报文压缩文件选择----页面</a></body>
    </html>
    ------------------------------------------------------------------答对 的 100分!
      

  10.   

    -------------------------------------------------------display_10.jsp-----------------------------------------
    <%@ page contentType="text/html; charset=gb2312" language="java"
             import="com.jspsmart.upload.*,java.util.*" %>
    <html>
    <head>
        <title>文件上传处理页面</title>
        <style type="text/css">    </style>    <link href="../../css/css.css" rel="stylesheet" type="text/css">    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    </head><body>
    <%
            //com.jspsmart.upload.File file_down = su.getFiles().getFile(0);
        //String file_down_name=file_down.getFileName();    // 下载文件
        //su.downloadFile("D:/ZXDATA/SEND/");
        //把SEND目录下的所有文件名(截取日期的8位)放入数组,以备排序
    /* **********************************************************
    //JSP那个函数可以读取某个文件夹下的所有文件名?
    //并且返回这个文件夹下的文件个数,以备For循环调用时用
     int[] send_file_name_sort = new int[su.getFiles().getCount()];
        for (int i = 0; i < su.getFiles().getCount(); i++) {
            com.jspsmart.upload.File file_down = su.getFiles().getFile(0);
            if (file_down.isMissing()) continue;
            String file_date_msg = file_down.getFileName().substring(5, 12);
            int file_date_int = Integer.parseInt(file_date_msg);
            send_file_name_sort[i] = file_date_int;
        }
        ************************************************************** */ //******************把所有文件排序!***************************
        int[] send_file_name_sort = new int[];
        String[] send_file_name_10 = new String[10];
        out.println("<BR>" + "-------------原来SEND文件夹中的所有CMIS压缩报文-------------" + "<BR>");
        send_file_name_sort[0] = 20051201;
        for (int i = 0; i < send_file_name_sort.length; i++) {
            send_file_name_sort[i] = send_file_name_sort[0] + i;        out.println((i + 1) + ":" + "\t\t\t" + "send" + send_file_name_sort[i] + ".zip" + "<BR>");
        }
        Arrays.sort(send_file_name_sort);    //从小到大排序(日期从较早到现在) ,排在后面的日期越新
    out.println("<BR>" + "-------------你可以下载的10个最新CMIS报文压缩文件-------------" + "<BR>");
    //*************************只截取最新的十个文件*******************
        for (int i = 1; i < 11; i++) {
            out.println("你可以下载的CMIS报文压缩文件" + i + ":" + "<a href=" + "\"" + "../page/do_download_sample" + (i-1) + ".jsp" + "\">" + "send" + send_file_name_sort[send_file_name_sort.length - i] + ".zip" + "</a> ");        send_file_name_10[i-1] = "send" + send_file_name_sort[i-1] + ".zip";        out.println("<BR>");
        }
    %>
    <div align="center"><a href="../page/down_load_sample.html">返回</a></div></body>
    </html>
    ------------------------------------------------- do_download_sample0.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);
    // 下载文件//****************这里的send_file_name_10[0]提示无法识别改变量*************su.downloadFile("D:/ZXDATA/SEND/"+send_file_name_10[0]);//问题的关键就在这里!如何读取display_10.jsp 文件中的send_file_name_10数组 %>
    /**********后面的send_file_name_10[1]~ send_file_name_10[9]都是这个问题!**********
    *****************提示无法识别改变量************
    ********************************问题的关键就在这里!*************************
    ******如何读取display_10.jsp 文件中的send_file_name_10数组***************/