2015-03-02 2 views
1

Я делаю вызов ajax для сервлета Java для загрузки 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 код сервлета для заголовка:

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

Браузер определяет это. Если их браузер позволяет им сохранять в любом месте, он дает им диалог. Если их браузер не работает (как обычно на мобильном устройстве), он сохраняет в местоположении по умолчанию.

Если вы тестируете это в современном браузере, таком как Firefox, перейдите к настройкам. Настройки Firefox на общей вкладке имеют две опции: «Всегда спрашивайте, где сохранить файл» и «Сохранить файлы в ... «определенная папка. Это правильно для пользователей, чтобы контролировать это из настроек браузера, а не для каждого веб-сайта, контролирующего его, поэтому это решение для браузера.

+0

Да, я знаю это! Но я не могу справиться настройки браузера. как знать обходное решение, чтобы сделать это. Как перехватить ответ в диалоговом окне jquery для выбора, где сохранить файл. – Maforast

+0

@Maforast, Вы не можете; в этом-то и дело; это невозможно. – developerwjk