2014-12-09 3 views
0

나는 Spring-MVC 애플리케이션을 만들고있다. 이 응용 프로그램에서는 프론트 엔드의 일부 기능을 사용하여 캡처 한 스크린 샷에서 PDF 파일을 만드는 방법을 사용하고 있습니다. 이제는 사용자가 클릭하는 버튼이 있으며 'POST'를 통해 이미지를 보내면 PDF로 변환됩니다. 문제는 이것이 'POST'이기 때문에 정상적인 파일 다운로드 방법을 사용하여 파일을 반환 할 수 없다는 것입니다.Spring-MVC에서 다운로드 링크 만들기

jquery를 사용하여 파일을 다운로드 할 수있는 연구가 있지만, 다운로드 URL이 필요합니다. 나는 스크린 샷을 만들기위한 코드를 게시하고 있습니다. PDF는 친절하게도 다운로드 URL을 만드는 방법을 알려줍니다.

컨트롤러 클래스 :

@RequestMapping(value = "/canvas/screenshot", method = RequestMethod.POST, produces = "application/pdf") 
    public 
    @ResponseBody 
    String saveCanvasScreenshot(@RequestBody String body, Model model,HttpServletResponse response) { 
Person person = personService.getCurrentlyAuthenticatedUser(); 
     body = body.substring(30); 
     String path = "/home/akshay/"+person.getFirstName()+".pdf"; 
     try { 
      body = URLDecoder.decode(body, "UTF-8"); 
      canvasImageBytes = body.getBytes(); 
      canvasImageBytes = org.apache.commons.codec.binary.Base64.decodeBase64(canvasImageBytes); 
      Canvas canvas = canvasService.getCanvasById(staticcanvasid); 
      canvas.setCanvasimage(canvasImageBytes); 
      canvasService.addCanvas(canvas, person); 
      boolean b = convertimagetopdf(body); 
      if(b == true){ 
       // And here I would like to sent the URL back as a String. 
} 

자바 스크립트 방법 :

$("#pdf-creator").click(function(){ 
      document.styleSheets[4].disabled=true; 
      var screenshot = $('#main').clone(); 
      renderingScreenshot = true; 
      setWidthsForScreenshot(screenshot); 
      html2canvas($('#main'), { 
       onrendered: function(canvas) { 
        var img = canvas.toDataURL("image/png"); 
        img = encodeURIComponent(String(img)); 
        $.ajax({ 
         url: baseURL + '/canvas/screenshot', 
         type: 'POST', 
         data: img, 
         success: function(){ 
          document.styleSheets[4].disabled=false; 
          $('#loading-image').show(); 

         }, 
          error: function(xhr, status, error){ 
           $('body').append(xhr.responseText); 
           document.styleSheets[4].disabled=false; 
           $('#loading-image').show(); 

          } 
        }); 
       } 
       }); 
     }); 
     initializeGridstack(); 
+0

_kindly 다운로드 URL을 만드는 방법을 알려주세요. - 나중에 사용하기 위해 PDF를 저장하는 방법을 알려 주시기 바랍니다. – zeroflagL

+0

pdf가 디스크에 저장됩니다 ... 파일 경로가 'path'변수에 있습니다. –

+0

그리고 어디에 문제가 있습니까? 당신은 "정상적인 파일 다운로드 방법을 사용하여 파일을 반환하는"방법을 알고있는 것 같습니다. 따라서 저장된 PDF를 반환하는 다른 컨트롤러 메서드가 있다고 확신합니다. – zeroflagL

답변

0

당신은 응답 다운로드 링크를 반환 한 다음 GET 요청을 할 수 있습니다. Spring에서는 다운로드 링크로부터 파일을 얻기 위해 이것을 할 수있다.

@RequestMapping("/models/{fileId}.smth") 
      @ResponseBody 
      public HttpEntity<byte[]> getFile(@PathVariable String fileId) throws IOException { 
       byte[] model = org.apache.commons.io.FileUtils.readFileToByteArray(new File("C:/folder/" + fileId + ".smth")); 
       HttpHeaders headers = new HttpHeaders(); 
       headers.setContentType(MediaType.MULTIPART_FORM_DATA); 
       headers.setContentLength(model.length); 
       return new HttpEntity<byte[]>(model, headers); 
      }