| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- package es.uv.saic.web;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.math.BigInteger;
- import java.nio.file.Files;
- import java.nio.file.Path;
- import java.util.Optional;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.core.io.FileSystemResource;
- import org.springframework.http.MediaType;
- import org.springframework.http.ResponseEntity;
- import org.springframework.stereotype.Controller;
- import org.springframework.ui.Model;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.PathVariable;
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.RequestParam;
- import org.springframework.web.bind.annotation.ResponseBody;
- import es.uv.saic.dto.PdfDTO;
- import es.uv.saic.feign.DocumentClient;
- import fr.opensagres.xdocreport.core.XDocReportException;
- @Controller
- public class DownloadController {
- @Autowired
- private DocumentClient dc;
- /*
- * Download a file associated with a task instance
- * @param model
- * @param idInstanciaTasca The ID of the task instance
- * @param response HttpServletResponse
- * @return A FileSystemResource representing the file to download
- */
- @GetMapping(value="/download/{fileName}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
- @ResponseBody
- public FileSystemResource download(Model model, @PathVariable("fileName") BigInteger idInstanciaTasca) throws IOException {
- // Convert byte[] to FileSystemResource
- ResponseEntity<byte[]> response = dc.download(idInstanciaTasca);
- byte[] data = response.getBody();
- String fileName = response.getHeaders().getFirst("Content-Disposition").split("filename=")[1].replace("\"", "");
- Path tempFile = Files.createTempFile( "download-", "-" + fileName);
- Files.write(tempFile, data);
- tempFile.toFile().deleteOnExit();
- return new FileSystemResource(tempFile.toFile());
- }
- /*
- * Download a document by its ID
- * @param model
- * @param idDocument The ID of the document to download
- * @param response HttpServletResponse
- * @return A FileSystemResource representing the document to download
- */
- @GetMapping(value="/download/document/{id}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
- @ResponseBody
- public FileSystemResource downloadDocument(Model model, @PathVariable("id") Integer idDocument) throws FileNotFoundException {
- return dc.downloadDocument(idDocument).getBody();
- }
- /*
- * Download a populated template for a given task instance
- * @param model
- * @param idTascai The ID of the task instance
- * @param response HttpServletResponse
- * @return A byte array representing the populated template to download
- */
- @GetMapping(value="/download/template/{id}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
- @ResponseBody
- public byte[] downloadTemplate(Model model, @PathVariable("id") BigInteger idTascai) throws IOException, XDocReportException {
- return dc.downloadTemplate(idTascai);
- }
- /*
- * Generate a PDF preview from provided content
- * @param model
- * @param content The content to convert to PDF
- * @param idtascai Optional ID of the task instance for context
- * @param response HttpServletResponse
- */
- @PostMapping(value="/pdf/preview")
- @ResponseBody
- public byte[] downloadTemplatePdf(Model model,
- @RequestParam("content") String content, @RequestParam("idtascai") Optional<BigInteger> idtascai) throws IOException, InterruptedException {
- PdfDTO pdf = new PdfDTO(content, idtascai);
- return dc.downloadTemplatePdf(pdf);
- }
- }
|