to : biggie(飞碟) 
那是不是要把文件名记录在数据库中,要么怎么知道这条发布信息和哪个文件关联呢,我的附件可以是多个文件的

解决方案 »

  1.   

    传到服务器后,把文件改名,利用时间戳,精确的毫秒,路径保存在表里,和文件对应起来,
    <% 
    mySmartUpload.initialize(pageContext);
    mySmartUpload.upload();
    com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(0);
    if (!myFile.isMissing())
      {

                 String myfilename= null;
                 String sql="";
                 myfilename=myFile.getFileName();
         String fname =myFile.getFileName();
         String  suffix=myfilename.substring(0,myfilename.lastIndexOf('.'));
         String  suffix1=myfilename.substring(myfilename.lastIndexOf('.'));
                      String explain=(String)mySmartUpload.getRequest().getParameter("text");
                 
                 explain=new String(explain.getBytes("UTF-8"),"UTF-8");   
                 
                 String ts="/product/"+fname;
                 myFile.saveAs(ts);
         String filename=myFile.getFileName();
         out.println("说明: " + explain+ "<BR>");
         out.println("文件大小: " + myFile.getSize() + "<BR>");
         out.println("文件名称:" + fname+ "<BR>");
                 out.println("文件类型:" + myFile.getFileExt() + "<BR>");
         out.println("本地文件路径: " + myFile.getFilePathName() + "<BR>");
                 sql="insert into upload(id,explain,filename) values(se_dzzw.nextval,'"+explain+"','"+fname+"')";
                 sqlbean.executeQuery(sql);
                 out.println("<font color=red>上传数据库成功!</font>");
             
          }%>
      

  2.   

    为什么要改名呢,如果改名,那么当别人浏览时的文件名不是变了吗,按你说的,如果我上传的是“通知.doc"那么改成什么名字,别人浏览后看到的附件还是"通知.doc"吗?
      

  3.   

    我感觉有点类似email的附件,它是怎么在服务器上保存的呢
      

  4.   

    保存到数据库里比较安全不会被随意删除
    在数据库里要以二进制数据流保存(Blob)不该名的话,不同的人上传的同名文件回互相覆盖,除非在不同的目录中
    如果一文件保存最好把文件改名为  用户ID+原文件名 这样可以避免覆盖