用于Java文件下载的文件夹浏览对话框

时间:2015-03-02 12:11:25

标签: java jquery ajax servlets

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

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

我能这样做吗?

我的客户代码是:

  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();   

一切正常但文件在默认浏览器文件夹中下载。 :(

1 个答案:

答案 0 :(得分:0)

浏览器确定了这一点。如果他们的浏览器让他们保存在任何地方,它会给他们一个对话如果他们的浏览器没有(通常在移动设备上),则会保存在默认位置。你无能为力。

如果您在像Firefox这样的现代浏览器上进行测试,请转到您的设置。常规选项卡下的Firefox设置有两个选项“始终询问保存文件的位置”和“将文件保存到...”某些特定文件夹。用户可以从他们的浏览器设置而不是每个控制它的网站来控制它,这就是浏览器决定的原因。