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

Другие вопросы по тегам