java - Java 中文件下载的文件夹浏览对话框

标签 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);         
            }
          });
        }

我的 header 的 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();   

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

最佳答案

浏览器决定这一点。如果他们的浏览器允许他们在任何地方保存,就会给他们一个对话框。如果他们的浏览器不支持(通常在移动设备上),它会保存在默认位置。你对此无能为力。

如果您在 Firefox 等现代浏览器上测试此功能,请转到您的设置。 Firefox 的常规选项卡下的设置有两个选项“始终询问保存文件的位置”和“将文件保存到...”某个特定文件夹。用户从浏览器设置中控制这一点是正确的,而不是由每个网站控制它,这就是为什么这是由浏览器决定的原因。

关于java - Java 中文件下载的文件夹浏览对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28809492/

相关文章:

java - 安装包可以移动到SDCard

java - 使用映射键从 Java 映射中检索对象值

javascript - 如何在不刷新页面的情况下重新初始化同一页面中的数据表

java - wicket : only change single component (label) in ListView

java - 带有 rest-plugin : Map JSON value to ENUM 的 Struts2

java - Android 应用程序在创建打开 Intent 时崩溃

javascript - Ajax查询JSON数据不返回数据

javascript - AJAX 发布数据在 Controller mvc 中为空

javascript - 在 knockout 中传递 "event"

jquery - 使用 jQuery 声明链接