Ajax-вызов для загрузки файла, возвращенного из сервиса RESTful
Я довольно новичок в AJAX. Я отправляю запрос на сервер, используя AJAX. Служба возвращает текстовый файл. Но при возврате данных окно загрузки не отображается. Служба отдыха, которая возвращает файл, выглядит следующим образом:
@Path("/examples")
public class ExampleCodesRest {
@POST
@Path("/getcode")
@Produces(MediaType.TEXT_PLAIN)
public Response getCodes(@Context ServletContext context){
String in=context.getRealPath("/WEB-INF/reports.jrxml");
File file=new File(in);
ResponseBuilder response = Response.ok((Object) file);
response.header("Content-Disposition",
"attachment; filename=\"file_from_server.log\"");
return response.build();
}
}
Мой AJAX-вызов выглядит следующим образом:
$('a#link').click(function(event){
event.preventDefault();
$.ajax({
url: '/reports/rest/examples/getcode',
type: 'POST'
});
});
Файл успешно загружен без AJAX. С AJAX он не загружает файл. Пожалуйста, совет.
3 ответа
Совет прост: вы не можете загружать файлы через AJAX - это политика безопасности. Я имею в виду, что вы можете загрузить данные, но не можете сохранить их на диск со стороны JavaScript.
Если вы хотите скачать файл по клику, то вы можете просто добавить href
тебе a
тег. Или откройте новое окно с файлом URL
,
Вы не можете сделать это напрямую из AJAX, но вы можете обойти это, имея iframe, который инициирует загрузку. Смотрите Ajax File Download Issue для обсуждения.
А) у вас нет обратного вызова для получения данных обратно
б) Добавьте обратный вызов ошибок в свой код, чтобы вы могли видеть, есть ли ошибки после вызова:
$.ajax({
url: '/spaconsole/rest/examples/getcode',
type: 'POST'
success: function (data) {
console.log('ok');
},
error: function (xhr) {
console.log(xhr);
}
});
Редактировать: это если вы хотите отобразить текст на странице. Если вы хотите скачать файл, это не так, вы не можете использовать ajax