各位好,最近我在做一个用JSP实现数据管理的系统。现在遇到一个自动导入导出数据数据的问题。
有一个网页是用户用来查看表数据的,上面有自动导出数据按钮,用户点击可以选择保存路径。怎么实现让用户选择保存路径这个功能呢?关键是不知道怎么弹出一个文件另存为的对话框,查了很久都没找到解决方法。最好实现文件过滤功能。保存的类型是XML. 自动导入数据的功能已经基本实现了。用<input type="file" />来做的。但是没有过滤功能。不知各位有没有更好的解决方法。谢谢!!

解决方案 »

  1.   

    要导出数据为xml格式的文件?在后台直接拼装一个xml格式的文件就是了,然后写入流中。
    至于过滤,不知道是什么意思。
      

  2.   

    我现在的问题是怎么打开一个文件另存为的对话框,让用户选择保存路径,选择路径时,用户只能看到文件夹或xml类型的文件(我所说的过滤)。其他的后台功能都实现了。
      

  3.   

    没人回答吗?用js实现也行啊。
    PS:
    function SaveAs()
    {
           var fd = new ActiveXObject("MSComDlg.CommonDialog");
           fd.Filter = "Microsoft Office Excel(*.xls)|*.xsl";
           fd.FilterIndex = 2;
          
           // 必须设置MaxFileSize. 否则出错
           fd.MaxFileSize = 128;
     
           // 显示对话框
           fd.ShowSave();
    }这个试过了,不知道为啥完全没反应。
      

  4.   

    说错了,不是没反应,而是:
    网页错误详细信息用户代理: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; CIBA)
    时间戳: Mon, 18 May 2009 13:47:35 UTC
    消息: Automation 服务器不能创建对象
    行: 198
    字符: 8
    代码: 0
    URI: http://localhost:8080/TDMS/pages/goal.faces
      

  5.   

    导入数据之前需要自己编写代码校验导入文件的扩展名和数据格式
    导出自然是通过向输出流中写入的方式来实现,这个比导入还简单一点
    不要用客户端的js来做,使用web框架或servlet
      

  6.   

    有些web框架会对request的数据进行过滤,导致无法正常解析multipart/form-data数据,只影响文件上载
    下面是一个使用servlet实现文件下载的demo,晚上时间紧没有经过测试,请见谅public class DownloadServlet extends HttpServlet{
        private static final BUFFERSIZE = 1024 * 8;    public void doPost(HttpServletRequest req, HttpServletResponse rep)
            throws ServletException, IOException{
            File file = new File("test.xml");
            req.setCharacterEncoding("UTF-8");
            rep.setContentType("application/x-download;charset=UTF-8");
            rep.setHeader("Content-Disposition", "attachment;filename="+ 
                new String(file.getName().getBytes(), "ISO-8859-1"));
            OutputStream os = rep.getOutputStream();
            InputStream is = new FileInputStream(file);
            long readLength = 0;
            long fileLength = file.length();
            byte[] buffer = new byte[BUFFERSIZE];
            while(readLength < fileLength){
                int b = is.read(buffer, 0, BUFFERSIZE);
                readLength += (long)b;
                os.write(buffer, 0, b);
            }
            os.flush();
            os.close();
            is.close();
        }
    }
      

  7.   

    用<input type="file" />吧,过滤你就截取他的后缀名进行判断就可以过滤了。。
    如:<input type="file" name="file" id="file" onBlue="checkfile()"/>
    然后用JS
    function checkfile()
    {
       var last=document.getElementById("file").value.lastIndexOf(".");
       var length=document.getElementById("file").value.length;
       if(document.getElementById("file").value.subString(last,length)!=".xml")
       {
           alert("不是XML文件");
           return false;
       }else
       {
           return true;
       }
    }String path=request.getParameter("file");//不就可以得到路径了么?
      

  8.   

    你按照我上面那样写,在客户端就会出现一个保存对话框的,可以选择打开或保存
    要得到用户保存文件的路径就有点困难了,因为文件保存在用户的磁盘上,js访问磁盘是受限的
    也许在IE中使用ActiveXObject可以实现这样的功能,不建议你这样做