2016-12-07 4 views
0

У меня есть Java Servlet под названием DownloadFile и в Получ У меня есть некоторый код, получающий файл с базой данных и загружает его, когда я перейти к URLСкачать файл с JavaServlet

localhost:9080/myapp/DownloadFile 

Но я не хочу чтобы отправить мой пользователю этой страницы, чтобы загрузить файл, так что в моем JavaScript на нажатие кнопки у меня есть этот

$scope.downloadTemplate = function(){ 
    console.log("download template called"); 
    $.get("DownloadTemplate", function(responseText) { 
     console.log(responseText) 
    }); 
} 

функция вызывается, и сервлет вызывается, но файл не скачивается , Зачем? Здесь у вас есть соответствующий код сервлета

bytes = templateSet.getBytes("FILE"); 
      fileName = templateSet.getString("TEMPLATE_FILE_NAME"); 

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

      ServletOutputStream out = response.getOutputStream(); 
      out.write(bytes); 
      out.flush(); 
      out.close(); 

Как загрузить файл и сохранить его на странице, где находится кнопка загрузки?

Благодаря

+0

«Не загружается» означает, что его содержимое не выводится на консоль командой 'console.log (responseText)'? Имейте в виду, что вы не можете загрузить файл с помощью AJAX, для этого вам нужен регулярный запрос/переадресация страницы. –

+0

@JiriTousek Я вижу его напечатанным в консоли, но файл не загружается в мою файловую систему. Итак, какой тип запроса мне нужен? Почему вы не можете сделать это с помощью ajax – iqueqiorio

+0

Возможные дубликаты: http://stackoverflow.com/questions/33786773/using-window-openurl-self-opens-download-window-but-not-get-request/33786994, http: //stackoverflow.com/questions/4545311/download-a-file-by-jquery-ajax, http://stackoverflow.com/questions/20830309/download-file-using-an-ajax-request –

ответ

0

Вы не можете загрузить файл с помощью AJAX.

Если вы выполняете AJAX, вы получаете ответ в предоставленном обратном вызове. Ваш Javascript может использовать его так, как ему нравится, но он не будет запускать загрузку в браузере.

Браузер отображает диалоговое окно загрузки при отправке (полностраничного) запроса и получает заголовок, указывающий, что ответ содержит файл вместо веб-сайта.

Обычный способ сделать это, если вы не хотите, чтобы прямая ссылка на файл была связана с тем, чтобы Javascript перенаправил всю вкладку на URL-адрес файла, что-то вроде window.location.href = 'http://example.com/myfile';.