package it.digione.dg1cloud.controller;
|
|
import java.io.File;
|
import java.io.FileInputStream;
|
import java.io.IOException;
|
|
import javax.servlet.ServletContext;
|
|
import org.apache.logging.log4j.util.Strings;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.core.io.InputStreamResource;
|
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.MediaType;
|
import org.springframework.http.ResponseEntity;
|
import org.springframework.stereotype.Controller;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestParam;
|
|
import it.digione.dg1cloud.model.RegDocument;
|
import it.digione.dg1cloud.repository.RegDocumentRepository;
|
import it.digione.dg1cloud.service.CloudService;
|
|
@Controller
|
public class DownloadFileController {
|
|
private static final Logger logger = LoggerFactory.getLogger(CloudService.class);
|
|
@Autowired private ServletContext servletContext;
|
@Autowired private RegDocumentRepository regDocumentRepository;
|
|
@RequestMapping("/downloadFile")
|
public ResponseEntity<InputStreamResource> downloadFile(@RequestParam String fileName,
|
@RequestParam long id,
|
@RequestParam(value = "secretKey", required = false) String secretKey) throws IOException {
|
|
logger.debug("Avvio download file {} con id {}, fileName, id");
|
|
MediaType mediaType = MediaType.APPLICATION_OCTET_STREAM;
|
try {
|
mediaType = MediaType.parseMediaType(servletContext.getMimeType(fileName));
|
} catch (Exception e) {
|
logger.warn("Errore nello stabilire il mime type del file. VerrĂ usato " + mediaType.toString(), e);
|
}
|
|
RegDocument regDocument = regDocumentRepository.getOne(id);
|
|
if (regDocument.getFileName().equalsIgnoreCase(fileName) == false ) {
|
logger.error("Il nome del file richiesto non corrisponde con quello referenziato dall'id");
|
throw new RuntimeException("Il nome del file richiesto non corrisponde con quello referenziato dall'id");
|
}
|
|
if ( regDocument.getSecretKey() != null ) {
|
logger.debug("E' stata specificata una secretKey. Avvio le verifiche.");
|
if ( Strings.isEmpty(secretKey) == true ) {
|
logger.error("Non e' stata inviata la secretKey");
|
throw new RuntimeException("Per scaricare il file occorre specificare la secretKey");
|
} else {
|
logger.debug("Controllo corrispondenza della secretKey");
|
if (secretKey.equals(regDocument.getSecretKey()) == false ) {
|
logger.error("La secretKey inviata non corrisponde a quella impostata in fase di richiesta salvataggio del file");
|
throw new RuntimeException("La secretKey inviata non corrisponde a quella impostata in fase di richiesta salvataggio del file");
|
} else {
|
logger.debug("SecretKey verificata correttamente");
|
}
|
}
|
}
|
|
File file = new File(regDocument.getFilePath());
|
FileInputStream fis = new FileInputStream(file);
|
InputStreamResource isr = new InputStreamResource(fis);
|
return ResponseEntity.ok()
|
// Content-Disposition
|
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + file.getName())
|
// Content-Type
|
.contentType(mediaType)
|
// Contet-Length
|
.contentLength(file.length()) //
|
.body(isr);
|
}
|
}
|