Uploading file using AJAX GET from Spring service

I am 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 GET method:

@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 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 an existing file from the server, AJAX is done success()

, but the file doesn't even load. Am I doing something wrong?

+3


source to share


1 answer


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



function downloadFile(fileName) {
  window.location.href = SERVICE_URI + "files/" + fileName;
}

      

+6


source







All Articles