Added file downloading
This commit is contained in:
parent
4a9c59b0e3
commit
16c286eac0
5 changed files with 68 additions and 1 deletions
|
|
@ -41,5 +41,10 @@ public class SignalController {
|
|||
return signalFacade.getReportList(username, packageName);
|
||||
}
|
||||
|
||||
@GetMapping(value = "/download", params = "file", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
|
||||
public ResponseEntity<Resource> downloadFile(@RequestParam("file") String file) {
|
||||
return signalFacade.downloadFile(file);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,25 @@
|
|||
package ru.nbch.credit_tracker.entities.response.errors;
|
||||
|
||||
import jakarta.xml.bind.annotation.*;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
@XmlType(name = "MonitoringDownloadResponse", propOrder = {
|
||||
"status",
|
||||
"errorCode",
|
||||
"errorText"
|
||||
})
|
||||
@XmlRootElement(name = "MonitoringDownloadResponse")
|
||||
public class MonitoringDownloadError implements CommonError {
|
||||
|
||||
@XmlElement(name = "Status", required = true)
|
||||
protected String status;
|
||||
@XmlElement(name = "ErrorCode",required = true)
|
||||
protected String errorCode;
|
||||
@XmlElement(name = "ErrorText",required = true)
|
||||
protected String errorText;
|
||||
|
||||
}
|
||||
|
|
@ -17,6 +17,7 @@ public enum SignalError {
|
|||
ERROR_011("011", "Получен невалидный XML"),
|
||||
ERROR_012("012", "Пакет не найден"),
|
||||
ERROR_013("013", "На стороне сервиса произошла ошибка, попробуйте повторить запрос позже или сообщите в техническую поддержку"),
|
||||
ERROR_014("014", "Файл не найден"),
|
||||
ERROR_015("015", "Клиент с указанным membercode не найден"),
|
||||
ERROR_016("016", "Нет активного пакета с именем "),
|
||||
ERROR_017("017", "При обработке запроса произошла ошибка. Повторите запрос позже или обратитесь в службу технической поддержки"), // TODO get rid of duplicate?
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package ru.nbch.credit_tracker.facade;
|
|||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.core.io.FileUrlResource;
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
|
@ -12,6 +13,7 @@ import ru.nbch.credit_tracker.entities.request.monitoring_request.MonitoringRequ
|
|||
import ru.nbch.credit_tracker.entities.request.monitoring_request.Subject;
|
||||
import ru.nbch.credit_tracker.entities.response.active_packages.MonitoringActivePackagesResponse;
|
||||
import ru.nbch.credit_tracker.entities.response.errors.MonitoringActivePackagesError;
|
||||
import ru.nbch.credit_tracker.entities.response.errors.MonitoringDownloadError;
|
||||
import ru.nbch.credit_tracker.entities.response.errors.MonitoringPackageDeleteError;
|
||||
import ru.nbch.credit_tracker.entities.response.errors.MonitoringReportListError;
|
||||
import ru.nbch.credit_tracker.entities.response.success.MonitoringPackageDeleteResponse;
|
||||
|
|
@ -29,6 +31,7 @@ import ru.nbch.credit_tracker.service.xml.FailureAnswerGenerator;
|
|||
import ru.nbch.credit_tracker.service.xml.SuccessAnswerGenerator;
|
||||
import ru.nbch.credit_tracker.service.xml.jaxb.IXmlProcessor;
|
||||
import ru.nbch.credit_tracker.service.xml.jaxb.XmlUtilService;
|
||||
import ru.nbch.credit_tracker.utils.CTUtil;
|
||||
import ru.nbch.credit_tracker.utils.ValidationUtil;
|
||||
|
||||
import java.io.File;
|
||||
|
|
@ -347,4 +350,28 @@ public class SignalFacade {
|
|||
throw new SignalErrorException(SignalError.ERROR_013, null, new MonitoringReportListError(), false);
|
||||
}
|
||||
}
|
||||
|
||||
public ResponseEntity<Resource> downloadFile(String fileName) {
|
||||
try {
|
||||
String memberCode = CTUtil.getMemberCodeFromFileName(fileName);
|
||||
String dirPath = config.getLoadDir() + File.separator + memberCode;
|
||||
File folder = new File(dirPath);
|
||||
|
||||
if (folder.exists() && folder.isDirectory()) {
|
||||
File file = new File(dirPath + File.separator + fileName);
|
||||
if (file.exists() && file.isFile()) {
|
||||
return ResponseEntity.ok().body(new FileUrlResource(file.getPath()));
|
||||
}
|
||||
} else {
|
||||
throw new SignalErrorException(SignalError.ERROR_014, null, new MonitoringDownloadError(), true);
|
||||
}
|
||||
throw new SignalErrorException(SignalError.ERROR_014, null, new MonitoringDownloadError(), true);
|
||||
} catch (Exception e) {
|
||||
if (e instanceof SignalErrorException) {
|
||||
throw (SignalErrorException) e;
|
||||
}
|
||||
log.error(e.getMessage(), e);
|
||||
throw new SignalErrorException(SignalError.ERROR_013, null, new MonitoringDownloadError(), false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,6 +38,15 @@ public class CTUtil {
|
|||
}
|
||||
|
||||
public static String generateResponseReportFileName(String userId, String packageName) {
|
||||
return userId.substring(0,6) + "_" + packageName + "_" + LocalDateTime.now().format(responseReportDateTimeFormatter);
|
||||
return userId.substring(0, 6) + "_" + packageName + "_" + LocalDateTime.now().format(responseReportDateTimeFormatter);
|
||||
}
|
||||
|
||||
public static String getMemberCodeFromFileName(String fileName) {
|
||||
String[] parts = fileName.split("_");
|
||||
if (parts.length > 1) {
|
||||
return parts[0];
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue