最近在做毕业设计,做的是教学资源网站。有上传下载功能。
我想问一下,
1。学生在向服务器上传文件的时候,作业文件(可能有txt,doc,zip等格式)是要用数据库还是用文件夹装?
如果用数据库装的话,那用什么类型的字段可以装文件?
如果用文件夹装的话, 以后要用的时候怎么办?以后怎么能下载?
2。老师要我实现将相关的文件一次性打包下载。(也就是老师只需要第一次选择下载文件存放位置,就可以下载一个班的作业),我想问一下,开始的打包下载的一个文件夹是怎么创建的?然后后来下载的作业文件怎么样才能都自动放到开始建好的文件夹中??
 望大侠回答。谢谢。
   望穿秋水盼你回答。

解决方案 »

  1.   

    1、文件出在磁盘上,路径存在数据库
    2、通过条件 找到要打包的文件 (将其组织到一个文件夹)用zip打包(用 apache的好点) 然后实现下载
      

  2.   

    1.存数据库还是存文件系统各有各的优点,例如存数据库的话便于备份。要是存数据库的话需要使用blob类型的字段来保存二进制数据,但是从你说是要做毕业设计来看,估计也就是个sql server数据库了,那个是image类型字段存储二进制数据。我建议存文件系统,不要用数据库,存文件系统将来读取或压缩的话方便一些,当然备份就麻烦些了。2.打包的话用apache zip组件包,可以对目录压缩,文件下载自己写servlet或action处理,很简单的,就是返回个二进制流就可以了。
      

  3.   

    对了,文件上传可以使用apache common fileupload
      

  4.   

    谢谢大家,
    1。我现在只想把毕业设计的网站做出来,其实时间的空间效率我不考虑,我只想做出来就好了。5月分就要交上去了,
    2。我的单个文件上传已经可以用了。 但是打包下载的确是个麻烦问题,不会搞。单个文件下载我会。
    2。打包的话用apache zip组件包,我用的是TOMCAT服务器,可以用这个组件吗?
    如果有人实现过,可不可以给个代码啊?我可能写不出来。这个JSP以前没学过。是自学的,所以有太多不懂。
      

  5.   

    用jspsmartupload,文件上传到服务器,然后将地址存在数据库中,可以用路径来下载。
      

  6.   

    2。打包的话用apache zip组件包,我用的是TOMCAT服务器,可以用这个组件吗?这个可以 如果需要打包代码 我可以给你  我自己写了一个
      

  7.   

    我blog中有Apache zip 打包 和解压缩的代码
      

  8.   

    1。谢谢zidasine,我去找找资料,自己试一下,你不用写了,太麻烦你了,你又要重新写,我的分又不多。太感谢你了。谢谢你给我方法。
    2。然后就是我还想问一下。
    我有SERVLET,要修改:WEB.XML文件。但是当我一修改的时候TOMCAT就不能用了。
    不知道该怎么办。
     我的WEB.XML代码是:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!--
     Licensed to the Apache Software Foundation (ASF) under one or more
      contributor license agreements.  See the NOTICE file distributed with
      this work for additional information regarding copyright ownership.
      The ASF licenses this file to You under the Apache License, Version 2.0
      (the "License"); you may not use this file except in compliance with
      the License.  You may obtain a copy of the License at      http://www.apache.org/licenses/LICENSE-2.0  Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      See the License for the specific language governing permissions and
      limitations under the License.
    --><web-app xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
       version="2.5">  <display-name>Welcome to Tomcat</display-name>
      <description>
         Welcome to Tomcat
      </description>
    </web-app>
    但是当我在</web-app>前加入:
      <servlet>
         <servlet-name>handleComputer</servlet-name>
         <servlet-class>tom.HandleComputer</servlet-class>
      </servlet>
      </servlet-mapping>
         <servlet-name>handleComputer</servlet-name>
         <url-pattern>/helpComputer</url-pattern>
      </servlet-mapping>后就不行了,服务器不能用。
    如果只加
      <servlet>
         <servlet-name>handleComputer</servlet-name>
         <servlet-class>tom.HandleComputer</servlet-class>
      </servlet>服务器还是可以用的,但是SERVLET还是不能用。
    请问一下。我这种情况怎么解决??
      

  9.   

    我最近在学习这方面的知识,看了张孝祥的STRUTS视频学了点,分享一下O(∩_∩)O~.
    存文件嘛,这个建议不要用数据库存储,那么多文件虽然都不大,不过你想想一个班总会有30+个学生吧,一学期总要交个10+次作业吧,一个老师怎么也要教3+个班吧,一个学期他要有1000+份作业,不说别的这东西一般都放好久,例如考试卷子虽然不用但一直留着。1000+个文件存在服务器上负担都那么大,何况数据库还要不断的读取访问,它不累我看着都累,所以还是存在相应目录下吧!至于这个目录问题,把目录存在数据库里就行了,不用花大量的时间查询数据库,拿到目录交给struts或者相应的文件处理包就成了。当然这里也有个问题你也不能把1000+个文件放到一个文件夹里,张孝祥的那个视频里讲的1000+个文件一个文件夹里面打开要打个几分钟,等得闷都闷死了,具体实现方法去传智播客下视频看看吧~~我不是做宣传的啊,只是单纯的学习知识O(∩_∩)O~
    LZ的第二个问题很有意思,考虑一下好像也不太难,制定一个文件夹后,你只要获取相应班级的作业文件路径,存到数组或者啥容器里面,其他的交给实现类吧~~然后去喝茶~~
      

  10.   

      </servlet-mapping> 改成<servlet-mapping>
      <servlet-name>handleComputer</servlet-name>
      <url-pattern>/helpComputer</url-pattern>
      </servlet-mapping>后就不行了,服务器不能用。
      

  11.   

    大家好。我有一个SERVLET类,但是不能用啊。老是说进而有错误!!(我这个小程序是用来做算术运算的,是书上的一个例子,不知道为什么照着书打的,老是有错??)其中WEB.XML文件配置无误。
    错误提示是说:
    type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: /showResult.jsp(13,5) Invalid standard action
    org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
    org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
    org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:88)
    org.apache.jasper.compiler.Parser.parseStandardAction(Parser.java:1163)
    org.apache.jasper.compiler.Parser.parseElements(Parser.java:1455)
    org.apache.jasper.compiler.Parser.parse(Parser.java:133)
    org.apache.jasper.compiler.ParserController.doParse(ParserController.java:216)
    org.apache.jasper.compiler.ParserController.parse(ParserController.java:103)
    org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:153)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:314)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:294)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:281)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    tom.HandleComputer.doPost(HandleComputer.java:50)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)。。
    我的SERVLET文件是:(文件名:HandleComputer.java)
    package tom;
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;  public class HandleComputer extends HttpServlet{

    public void init(ServletConfig config)throws ServletException{
     super.init(config); 
    }
     public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{  ComputerBean dataBean=null;
      HttpSession session=request.getSession(true);
      try{
       dataBean=(ComputerBean)session.getAttribute("ok");
       if(dataBean==null)
       {
     dataBean=new ComputerBean();  
         session.setAttribute("ok",dataBean);   
       }
      
      }catch(Exception e){
      dataBean=new ComputerBean();
      session.setAttribute("ok",dataBean);
      }
      double numberOne=Double.parseDouble(request.getParameter("numberOne"));
      double numberTwo=Double.parseDouble(request.getParameter("numberTwo"));
      String operator=request.getParameter("operator");
      double result=0;
      if(operator.equals("+")){
      result=numberOne+numberTwo;
        }
      else if(operator.equals("-")){
      result=numberOne-numberTwo;
        }
      else if(operator.equals("*")){
      result=numberOne*numberTwo;
        }
      else if(operator.equals("/")){
      result=numberOne/numberTwo;
        }
      dataBean.setNumberOne(numberOne); 
      dataBean.setNumberTwo(numberTwo);
      dataBean.setOperator(operator);     
      dataBean.setResult(result);
      RequestDispatcher dispatcher=request.getRequestDispatcher("/showResult.jsp"); 
          dispatcher.forward(request,response);
     }
     public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
        doPost(request,response); 
     }  
    }
    我这个程序有点长,不好意思。但是有利于大家找错误时用一下。谢谢。
      

  12.   

    哦,里面还有个ComputerBean.java文件没给出来,
    在下面啊:
    public class ComputerBean {
     double numberOne,numberTwo,Result;
     String operater="+";
     public void setNumberOne(double n){
     numberOne=n;
     }
     public double getNumberOne(){
     return numberOne; 
     }
     public void setNumberTwo(double n){
     numberTwo=n;
     }
     public double getNumberTwo(){
     return numberTwo; 
     }
     public void setOperator(String s){
     operater=s.trim();
     }
     public String getOperator(){
     return operater; 
     }
     public void setResult(double n){
     Result=n;
     }
     public double getResult(){
     return Result; 
     }
    }
    。谢谢,
      

  13.   

    1.先用jspsmartupload上传文件,上传后文件存在服务器某个路径下
    2.然后将上传文件名获取到(jspsmartupload有方法),然后将文件名存入到数据库,这样数据库占用小,如果存文件在数据库中数据库压力太大
    3。编写下载程序,程序原理:通过获取数据库的文件名在上传的目录下找到这个文件即可
      

  14.   

    用数据库存文件的字段类型 为BLOB字段。下载的时候 将要所有要下载的文件打成ZIP压缩包。让老师下载下去。打包成ZIP包,有很多工具JAR包。JDK也自带了一个