我要做的是jsp结合oracle的blob字段,实现文件的上传和下载。单个文件的上传下载功能已经实现,需要解决批量下载的问题。
问题是:
每下载一个文件就要弹出个保存文件提示框,很不方便。需求是:
如何实现下载多个文件只需要进行一次预先的保存路径设置?
或者如何阻止提示框的弹出?看了很多帖子都说是需要自己开发组件,有没有公开的组件或可行的脚本处理方案?
任务催的急,请高手指点迷津,或共同探讨。先给100分,不够再加!!!
急!!!

解决方案 »

  1.   

    这个很困难啊
    首先,你的下载弹出对话框是肯定避免不了的,因为这个东西也是出于安全考虑么,你如果批量下载里有病毒之类的,那不是让你钻了空子么? 除了写控件好像真没啥办法。
    不过LZ是否可以尝试这种方法,客户选择多个文件下载,你将这多个文件打包成rar之类的压缩文件一并给客户发过去,这样不用写控件,又可以防止一些不友好的东西,比如有exe直接给用户返回去还可能出现安全问题等等反正我们之前都是这样做的
      

  2.   

    先把目录压缩到一个文件,然后再下载。没想到别的好方法。这个需要加载控件类
    %@ Import namespace="ICSharpCode.SharpZipLib.Zip" %>
    <%@ Import Namespace="System.IO" %>
    <script language="c#" runat="server">
     ZipOutputStream zos=null;
     String strBaseDir="";
     void dlZipDir(string strPath,string strFileName){
      MemoryStream ms =null;
      Response.ContentType = "application/octet-stream";
      strFileName=HttpUtility.UrlEncode(strFileName).Replace('+',' ');
      Response.AddHeader("Content-Disposition", "attachment; filename=" + strFileName+".zip");
      ms = new MemoryStream();
      zos = new ZipOutputStream(ms);
      strBaseDir=strPath+"\\";
      addZipEntry(strBaseDir);
      zos.Finish();
      zos.Close();
      Response.Clear();
      Response.BinaryWrite(ms.ToArray());
      Response.End();
     }
     
     void addZipEntry(string PathStr){
      DirectoryInfo di= new DirectoryInfo(PathStr);
      foreach(DirectoryInfo item in di.GetDirectories()){
       addZipEntry(item.FullName);
      }
      foreach(FileInfo item in di.GetFiles()){
       FileStream fs = File.OpenRead(item.FullName);
       byte[] buffer = new byte[fs.Length];
       fs.Read(buffer, 0, buffer.Length);
       string strEntryName=item.FullName.Replace(strBaseDir,"");
       ZipEntry entry = new ZipEntry(strEntryName);
       zos.PutNextEntry(entry);
       zos.Write(buffer, 0, buffer.Length);
       fs.Close();
      }
     }
     void Page_Load(){
      dlZipDir(Server.MapPath("."),"test");
     }
    </script>