2015-03-02 128 views
1

我对客户端的java servlet进行了ajax调用,以便下载xml文件。我使用此代码在“成功”ajax调用上追加表单,并强制触发以便有效启动文件下载。在Java中下载文件的文件夹浏览对话框

我的问题是,我想允许客户端用户选择保存文件的位置,而不是将其下载到默认浏览器文件夹中。

我可以这样做吗?

我的客户端代码:用于头

function downloadAnnotationXML() 
     { 
      downloadAnnotation=true; 
      var temp=new Object(); 
      temp.topic=topic; 
      temp.operation=operation 
      temp.data=annotazioniXml; 
      var json = JSON.stringify(temp); 
      var url="<%=request.getContextPath()%>/DownloadAnnotationServlet"; 
      $.ajax({ 
      type: "POST", 
      url: url, 
      data: {json:json}, 
      success: function(response, status, request) { 
       var disp = request.getResponseHeader('Content-Disposition'); 
       if (disp && disp.search('attachment') != -1) { 
        var form = $('<form id="ajax" method="POST" action="' + url + '">'); 
        form.append($('<input type="hidden" name="json" value="json">')); 

        $('body').append(form); 
        form.submit(); 
       } 
      }, 
      error:function(jqXHR, textStatus, thrownError) 
      { 
       error = "Non è stato possibile caricare l'oggetto";   
       msg = textStatus + thrownError; 
       promptError(error+" <br /> "+ msg);   
      } 
      }); 
     } 

我的Java servlet代码是:

response.setContentType("application/octet-stream"); 
    response.setHeader("Content-Disposition", "attachment;filename="+file.getName()); 

       OutputStream outStream = response.getOutputStream(); 
    byte[] buffer = new byte[4096]; 
    int bytesRead = -1; 
    while ((bytesRead = inStream.read(buffer)) != -1) { 
     outStream.write(buffer, 0, bytesRead); 
    } 
    inStream.close(); 
    outStream.close(); 

所有的工作很好,但文件上的默认浏览器文件夹中下载。 (

回答

0

浏览器确定这一点,如果他们的浏览器让他们保存在任何地方,它会给他们一个对话框,如果他们的浏览器没有(通常在移动设备上),它会保存在默认位置, t做任何事情

如果你在Firefox等现代浏览器上进行测试,请进入你的设置,在常规选项卡下的Firefox设置有两个选项“总是询问保存文件的位置”和“保存文件到...“一些特定的文件夹,用户可以通过浏览器设置而不是每个网站来控制它,这是正确的,这就是为什么这是一个浏览器的决定。

+0

是的,我知道,但我无法处理浏览器客户端设置,所以我希望想知道一个解决方法来做到这一点。作为拦截响应在对话框jquery中选择保存文件的位置。 – Maforast 2015-03-03 09:01:16

+0

@Maforast,你不能;这才是重点;不可能。 – developerwjk 2015-03-03 16:29:48