2016-02-11 3 views
2

У меня есть некоторые XML-файлы хранятся в виде строки в моей базе данных и лестница + пружинной основе бэкэнде с этим контроллером:Загрузка файла с помощью AJAX + пружинного веба

@RequestMapping(value = Array("/download"), method = Array(RequestMethod.GET)) 
def downloadFile(@RequestParam filename: String, //some more params 
       response: HttpServletResponse) = { 
    val fileContent = // some logic here, returns file content as String 
    response.setContentType("application/xml") 
    response.setHeader("Content-Disposition", s"attachment;filename=$filename") 
    response.setStatus(HttpServletResponse.SC_OK) 
    response.getOutputStream.write(fileContent.getBytes) 
    response.flushBuffer() 
} 

Также у меня есть этот скрипт:

$.ajax({ 
    type: "GET", 
    url: url, 
    data: { 
     filename: filename //and some more params 
    } 
}) 

Затем я отправляю HTTP-запрос на сервер, получаю правильный HTTP-ответ, а затем ничего не происходит. Вся информация, которую я имею в журналах браузера, заключается в том, что ответ имеет содержимое файла в теле и заголовках, но загрузка никогда не запускается.

Что я делаю неправильно?

Я видел эти SO Q & А, но они не помогают мне вообще:

download file using an ajax request

Downloading a file from spring controllers

UPD1: Также пытался this one, без результата.

+0

Почему вы не хотите вызывать API с помощью тега привязки, чтобы вы могли напрямую загрузить файл. Я думаю, что будет g8 –

ответ

0

Вот как я сделал файл для загрузки с сервера.

output = (byte[]) processedDocumentObject; 
    HttpHeaders responseHeaders = new HttpHeaders(); 
    responseHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM); 
    responseHeaders.setContentDispositionFormData("attachment", "file.xml"); 
    HttpEntity<byte[]> fileEntity = new HttpEntity<byte[]>(output,responseHeaders); 
    return fileEntity; 

Однако это в Java и HttpHeaders является org.springframework.http.HttpHeaders и HttpEntity является org.springframework.http.HttpEntity<byte[]>

Кроме того, вам нужно преобразовать строку в массив байтов на начальном этапе.

+0

Спасибо, но не работал для меня. – Everv0id

Смежные вопросы