Leonardo Vannucci
2018-08-09 b5e4a0dc28966479e0f2d5c0d69f2f38f734fee1
dg1cloud-core/src/main/java/it/digione/dg1cloud/service/Utils.java
....@@ -1,33 +1,44 @@
11 package it.digione.dg1cloud.service;
22
33 import java.io.File;
4
+import java.io.FileInputStream;
5
+import java.io.FileNotFoundException;
46 import java.io.IOException;
57 import java.net.MalformedURLException;
68 import java.net.URL;
9
+
10
+import javax.servlet.ServletContext;
711
812 import org.apache.commons.io.FileUtils;
913 import org.apache.logging.log4j.util.Strings;
1014 import org.slf4j.Logger;
1115 import org.slf4j.LoggerFactory;
1216 import org.springframework.beans.factory.annotation.Autowired;
17
+import org.springframework.core.io.InputStreamResource;
18
+import org.springframework.http.HttpHeaders;
19
+import org.springframework.http.MediaType;
20
+import org.springframework.http.ResponseEntity;
1321 import org.springframework.stereotype.Service;
1422 import org.springframework.web.util.UriBuilder;
1523 import org.springframework.web.util.UriComponentsBuilder;
1624
1725 import it.digione.dg1cloud.config.AppConfig;
1826 import it.digione.dg1cloud.model.RegDocument;
27
+import it.digione.dg1cloud.repository.RegDocumentRepository;
1928
2029 @Service("utils")
2130 public class Utils {
2231
2332 @Autowired private AppConfig appConfig;
33
+ @Autowired private RegDocumentRepository regDocumentRepository;
34
+ @Autowired private ServletContext servletContext;
2435
2536 private static final Logger logger = LoggerFactory.getLogger(CloudService.class);
2637
2738 public URL generateUrl(RegDocument regDocument) throws MalformedURLException {
2839 logger.debug("Genero l'url per il record file {} con id {}", regDocument.getFileName(), regDocument.getDocumentId());
2940 UriBuilder uriBuilder = UriComponentsBuilder.fromUriString(appConfig.getExternalBaseUrl());
30
- uriBuilder.path("/downloadFile");
41
+ uriBuilder.path("/downloadPage");
3142 uriBuilder.queryParam("fileName", regDocument.getFileName());
3243 uriBuilder.queryParam("id", regDocument.getDocumentId());
3344 if ( Strings.isEmpty(regDocument.getSecretKey()) == false ) {
....@@ -53,4 +64,51 @@
5364 logger.debug("La directory {} non e' vuota", directory.getAbsolutePath());
5465 }
5566 }
67
+
68
+ public ResponseEntity<InputStreamResource> getDownloadResponseEntity(String fileName, long id, String secretKey)
69
+ throws FileNotFoundException {
70
+ logger.debug("Avvio download file {} con id {}", fileName, id);
71
+
72
+ MediaType mediaType = MediaType.APPLICATION_OCTET_STREAM;
73
+ try {
74
+ mediaType = MediaType.parseMediaType(servletContext.getMimeType(fileName));
75
+ } catch (Exception e) {
76
+ logger.warn("Errore nello stabilire il mime type del file. VerrĂ  usato " + mediaType.toString(), e);
77
+ }
78
+
79
+ RegDocument regDocument = regDocumentRepository.getOne(id);
80
+
81
+ if (regDocument.getFileName().equalsIgnoreCase(fileName) == false ) {
82
+ logger.error("Il nome del file richiesto non corrisponde con quello referenziato dall'id");
83
+ throw new RuntimeException("Il nome del file richiesto non corrisponde con quello referenziato dall'id");
84
+ }
85
+
86
+ if ( regDocument.getSecretKey() != null ) {
87
+ logger.debug("E' stata specificata una secretKey. Avvio le verifiche.");
88
+ if ( Strings.isEmpty(secretKey) == true ) {
89
+ logger.error("Non e' stata inviata la secretKey");
90
+ throw new RuntimeException("Per scaricare il file occorre specificare la secretKey");
91
+ } else {
92
+ logger.debug("Controllo corrispondenza della secretKey");
93
+ if (secretKey.equals(regDocument.getSecretKey()) == false ) {
94
+ logger.error("La secretKey inviata non corrisponde a quella impostata in fase di richiesta salvataggio del file");
95
+ throw new RuntimeException("La secretKey inviata non corrisponde a quella impostata in fase di richiesta salvataggio del file");
96
+ } else {
97
+ logger.debug("SecretKey verificata correttamente");
98
+ }
99
+ }
100
+ }
101
+
102
+ File file = new File(regDocument.getFilePath());
103
+ FileInputStream fis = new FileInputStream(file);
104
+ InputStreamResource isr = new InputStreamResource(fis);
105
+ return ResponseEntity.ok()
106
+ // Content-Disposition
107
+ .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + file.getName())
108
+ // Content-Type
109
+ .contentType(mediaType)
110
+ // Contet-Length
111
+ .contentLength(file.length()) //
112
+ .body(isr);
113
+ }
56114 }