However, sometimes the file controller route is spring necessary and thats file what were going to be focused on in this quick article.
Our modified FileDownloadController will send files to the browser, only if file the referer header is not null.
DateTimeFormatter; import rmatStyle; import p; @Component reportView public class ReportPdfView extends AbstractView @Override protected void Object model, HttpServletRequest request, HttpServletResponse response) throws Exception tHeader Content-Disposition "attachment; filenamemyReport.We are going to use iText library for creating the document programmatically.Null!Empty /do nothing /or send error /If user is not authorized - he should be thrown out from here itself /Authorized user will download the file String dataDirectory Path file t(dataDirectory, fileName if (Files.Length return new FileSystemResource(file private File getFile throws FileNotFoundException, file file new File(file_path if (!file.Conclusion In this quick article, we had a look at a simple problem returning images or files from a Spring Controller.Apache POI.12 iText.1.15, maven.2.5, intelliJ spring idea.0.2.Pdf Report report (Report) t report /IText API PdfWriter pdfWriter new PdfWriter(tOutputStream PdfDocument pdf new PdfDocument(pdfWriter Document pdfDocument new Document(pdf /title Paragraph title new Paragraph(tName tFontSize(18f tItalic d(title /date Paragraph date new Paragraph(rmat( tFontSize(16f d(date /content Paragraph content new Paragraph(tContent d(content ose public class Report.Content-Disposition and give it the value attachment; filenamefileName, where fileName is the default file name spring that should appear in the File Download dialog box.Pdf private static final String application_PDF "application/pdf @RequestMapping(value servlet method T, produces application_PDF) public @ResponseBody void res) throws IOException.Using produces for Returning Raw Data.Exists(file) dHeader Content-Disposition "attachment; filename"fileName try py(file, tOutputStream tOutputStream.flush catch (IOException ex) intStackTrace If you want to enable downloads for only authorized users then check the users logged in status file first in the method, and then allow download otherwise redirect him to login screen.We will return the bean name as a view name from the Spring controller.Java webapp WEB-INF views main. Overview, serving static files to the episode client can be done in a variety of ways, and reaktor using a Spring Controller isnt necessarily the best available option.
File download project structure.
Hello world, like a more typical MVC application.
We are going extend AbstractView and use iText API directly.
File file getFile byte document pyToByteArray(file HttpHeaders header new game HttpHeaders tContentType(new MediaType application "pdf t Content-Disposition "inline; filename" tName return new header @RequestMapping(value resource method T, produces application_PDF) public @ResponseBody Resource res) throws FileNotFoundException.
File file getFile InputStream in new FileInputStream(file tContentType(application_PDF tHeader Content-Disposition "attachment; filename" tName tHeader Content-Length lueOf(file.
ExcelDocument: pdfdocument: Excelpdfcontroller: Cat:.w return report; html body h2 Spring Pdf View Example /h2 a href report" Get the Report /a /body /html Output clicking on the link: Example Project, dependencies and Technologies Used: spring-webmvc lease: Spring Web MVC.To disallow all download requests, coming from other domains, you can check life if the referer header contains your domain name.With @ResponseBody we can return pretty much any media type, as long as we have a corresponding http Message reaktor converter that can handle and marshall that to the output stream.The parameter produces can be set to a lot of different values (the complete list can be found here ) depending on the type of object we want to return.Add an http response header named.Package ntroller; import leSystemResource; import source; import tpEntity; import tpHeaders; import diaType; import ntroller; import leCopyUtils; import questMapping; import questMethod; import sponseBody; import tpServletResponse; import.Xml dependency /dependency Java Config class, in this example, we are going to use BeanNameViewResolver for resolving PDF view.Implementing the View, spring provides a support class AbstractPdfView but that is based on old deprecated iText API.To define that the returned byte array corresponds to an image, we can set the produces attribute of the @GetMapping annotation to precise the mime type of the returned object: @GetMapping( value get-image-with-media-type produces AGE_jpeg_value ) public @ResponseBody byte getImageWithMediaType throws IOException InputStream in getClass.Using produces for Returning Images, returning byte arrays allows us to return almost anything such as images or files: @GetMapping(value life image public @ResponseBody byte getImage throws IOException InputStream in getClass return ByteArray(in Here, were not defining that the returned byte array is an image.And, as always, the example code can be found over on Github.The first straightforward life solution is to use the @ResponseBody annotation on a controller method to indicate that the object returned by the method should be marshalled directly to the http response body: @GetMapping get-text public @ResponseBody String getText return "Hello world Thus, this method will.This crack will prevent the images from being downloaded directly by typing their URLs in the browser or request coming from other domains.