From 74967f038707374661a6765245c062cb9f7bc7d7 Mon Sep 17 00:00:00 2001
From: leonardovannucci <leonardo.vannucci@digi-one.eu>
Date: Wed, 13 May 2020 15:00:07 +0200
Subject: [PATCH] Fix encoding filename

---
 dg1cloud-core/src/main/java/it/digione/dg1cloud/service/Utils.java                            |    7 ++++---
 dg1cloud-core/src/main/java/it/digione/dg1cloud/controller/DownloadFileCaptchaController.java |    3 ++-
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/controller/DownloadFileCaptchaController.java b/dg1cloud-core/src/main/java/it/digione/dg1cloud/controller/DownloadFileCaptchaController.java
index 8d7c7b0..cb69e3e 100644
--- a/dg1cloud-core/src/main/java/it/digione/dg1cloud/controller/DownloadFileCaptchaController.java
+++ b/dg1cloud-core/src/main/java/it/digione/dg1cloud/controller/DownloadFileCaptchaController.java
@@ -1,6 +1,7 @@
 package it.digione.dg1cloud.controller;
 
 import java.io.FileNotFoundException;
+import java.io.UnsupportedEncodingException;
 
 import javax.validation.Valid;
 
@@ -28,7 +29,7 @@
 
 	@PostMapping
 	public Object handleDownloadFileCaptcha(@ModelAttribute("downloadFileCaptchaForm") @Valid DownloadFileCaptchaForm form,
-									BindingResult result) throws FileNotFoundException{
+									BindingResult result) throws FileNotFoundException, UnsupportedEncodingException{
 		
 		ModelAndView modelAndView;
 		if (result.hasErrors()){
diff --git a/dg1cloud-core/src/main/java/it/digione/dg1cloud/service/Utils.java b/dg1cloud-core/src/main/java/it/digione/dg1cloud/service/Utils.java
index 1ebd03e..a6ee67f 100644
--- a/dg1cloud-core/src/main/java/it/digione/dg1cloud/service/Utils.java
+++ b/dg1cloud-core/src/main/java/it/digione/dg1cloud/service/Utils.java
@@ -4,6 +4,7 @@
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.io.UnsupportedEncodingException;
 import java.net.MalformedURLException;
 import java.net.URL;
 
@@ -33,7 +34,7 @@
 	@Autowired private RegDocumentRepository regDocumentRepository;
 	@Autowired private ServletContext servletContext;
 	
-	private static final Logger logger = LoggerFactory.getLogger(CloudService.class);
+	private static final Logger logger = LoggerFactory.getLogger(Utils.class);
 	
 	public URL generateUrl(RegDocument regDocument) throws MalformedURLException {
 		logger.debug("Genero l'url per il record file {} con id {}", regDocument.getFileName(), regDocument.getDocumentId());
@@ -66,7 +67,7 @@
 	}
 	
 	public ResponseEntity<InputStreamResource> getDownloadResponseEntity(String fileName, long id, String secretKey)
-			throws FileNotFoundException {
+			throws FileNotFoundException, UnsupportedEncodingException {
 		logger.debug("Avvio download file {} con id {}", fileName, id);
 		
 		MediaType mediaType = MediaType.APPLICATION_OCTET_STREAM;
@@ -104,7 +105,7 @@
 		InputStreamResource isr = new InputStreamResource(fis);
 		return ResponseEntity.ok()
 				// Content-Disposition
-				.header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + file.getName())
+				.header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename*=UTF-8''" + java.net.URLEncoder.encode(file.getName(),"UTF-8").replaceAll("\\+", "%20"))
 				// Content-Type
 				.contentType(mediaType)
 				// Contet-Length

--
Gitblit v1.6.2