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 он не загружает файл. Пожалуйста, совет.
Ответы
Ответ 1
Совет прост: вы не можете скачивать файлы через AJAX - это политика безопасности. Я имею в виду, что вы можете загружать данные, но вы не можете сохранить их на диск со стороны JavaScript.
Если вы хотите загрузить файл по клику, вы можете просто добавить href
к тегу a
. Или откройте новое окно с файлом URL
.
Ответ 2
A) у вас нет обратного вызова для получения данных обратно
b) Добавить обратный вызов ошибки к вашему коду, чтобы вы могли увидеть, есть ли ошибки после вызова:
$.ajax({
url: '/spaconsole/rest/examples/getcode',
type: 'POST'
success: function (data) {
console.log('ok');
},
error: function (xhr) {
console.log(xhr);
}
});
Изменить: это, если вы хотите отобразить текст на странице. Если вы хотите загрузить файл, это не так, вы не можете использовать ajax
Ответ 3
Вы не можете сделать это непосредственно из AJAX, но можете обойти его, имея iframe, который инициирует загрузку. См. Ajax File download Issue для обсуждения.