在 Spring-MVC 中创建下载链接

Creating a download link in Spring-MVC

本文关键字:下载 链接 创建 Spring-MVC      更新时间:2023-09-26

我正在开发一个Spring-MVC应用程序。在应用程序中,我正在使用一种方法从屏幕截图中创建pdf文件,方法是使用前端中的某些功能。现在,用户单击一个按钮,它通过"POST"发送图像,然后将其转换为PDF。问题是,因为这是一个"POST",所以我无法使用正常的文件下载方法来返回文件。

经过一些研究,我发现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.
}

Javascript方法:

 $("#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();

您可以返回下载链接作为响应,然后发出 GET 请求。在春季,您可以执行此操作以从可下载链接获取文件。

@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);
            }