title: File download through ajax
body: <p>I need to download file from server via ajax. The problem is that the file is not stored on server. My java-based backend automatically generates file from request parameters and returns it in response body: </p>
  
  <pre><code>  @RequestMapping(value = "/download", method = RequestMethod.GET)
    public void download(@RequestParam String description, @RequestParam Long logId, HttpServletResponse response) {
      try {
        InputStream fileContent = // getting file as byte stream
        response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
        response.setHeader("Content-Disposition", "attachment; filename=file.zip");
        ServletOutputStream responseOutputStream = response.getOutputStream();
        org.apache.commons.io.IOUtils.copy(fileContent, responseOutputStream);
        response.flushBuffer();
      } catch (IOException e) {
        logger.error("Attempt to download file failed", e);
      }
    }
  </code></pre>
  
  <p>So i need to handle it and allow user to download file. 
  My client side contains this: </p>
  
  <pre><code>$.ajax({
    type: "GET",
    url: "/download",
    data: {
      description: "test",
      logId: 123
    },
    success: function(data) {
      var blob = new Blob([data]);
      var link = document.createElement('a');
      link.href = window.URL.createObjectURL(blob);
      link.download = "file.zip";
      link.click();
    }
  })
  </code></pre>
  
  <p>Controller returns file, but then nothing happens. What am i doing wrong? </p>