Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Downloading a file using AJAX GET from Spring Service

I'm trying to implement a Service that automatically starts a download with the requested file.

This is my AJAX call:

function downloadFile(fileName) {
  $.ajax({
    url : SERVICE_URI + "files/" + fileName,
    contentType : 'application/json',
    type : 'GET',
    success : function (data)
    {
      alert("done!");
    },
    error: function (error) {
      console.log(error);
    }
  });
}

and this is my Spring Service method GET:

@RequestMapping(value = "/files/{file_name}", method = RequestMethod.GET)
public void getFile(@PathVariable("file_name") String fileName,
                    HttpServletResponse response) {
    try {
        // get your file as InputStream
        FileInputStream fis = new FileInputStream( fileName + ".csv" );
        InputStream is = fis;
        // copy it to response's OutputStream
        ByteStreams.copy(is, response.getOutputStream());
        response.setContentType("text/csv");
        response.flushBuffer();
    } catch (IOException ex) {
        throw new RuntimeException("IOError writing file to output stream");
    }

}

When my client requests the existing file from the server, the AJAX success() method is executed but the file is not even downloading. Am I doing anything wrong?

like image 852
charliebrownie Avatar asked Mar 17 '23 10:03

charliebrownie


1 Answers

Don't use ajax, just set window.location.href to the url of the file and set the http content disposition header in your server script to force the browser to save the file.

function downloadFile(fileName) {
  window.location.href = SERVICE_URI + "files/" + fileName;
}
like image 55
Musa Avatar answered Apr 01 '23 03:04

Musa