From 6f406fc42d08f6885e6969c3ef80dd04c4b42a1e Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Mon, 1 Apr 2024 12:45:06 -0500 Subject: [PATCH] CE-881 - support for download through storage action --- .../javalin/QJavalinProcessHandler.java | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinProcessHandler.java b/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinProcessHandler.java index cce70af5..d4238f64 100644 --- a/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinProcessHandler.java +++ b/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinProcessHandler.java @@ -49,6 +49,7 @@ import com.kingsrook.qqq.backend.core.actions.processes.QProcessCallback; import com.kingsrook.qqq.backend.core.actions.processes.RunProcessAction; import com.kingsrook.qqq.backend.core.actions.reporting.GenerateReportAction; import com.kingsrook.qqq.backend.core.actions.tables.InsertAction; +import com.kingsrook.qqq.backend.core.actions.tables.StorageAction; import com.kingsrook.qqq.backend.core.actions.values.QValueFormatter; import com.kingsrook.qqq.backend.core.exceptions.QBadRequestException; import com.kingsrook.qqq.backend.core.exceptions.QNotFoundException; @@ -67,6 +68,7 @@ import com.kingsrook.qqq.backend.core.model.actions.tables.insert.InsertInput; import com.kingsrook.qqq.backend.core.model.actions.tables.query.QCriteriaOperator; import com.kingsrook.qqq.backend.core.model.actions.tables.query.QFilterCriteria; import com.kingsrook.qqq.backend.core.model.actions.tables.query.QQueryFilter; +import com.kingsrook.qqq.backend.core.model.actions.tables.storage.StorageInput; import com.kingsrook.qqq.backend.core.model.data.QRecord; import com.kingsrook.qqq.backend.core.model.metadata.QInstance; import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData; @@ -285,12 +287,24 @@ public class QJavalinProcessHandler // todo context.contentType(reportFormat.getMimeType()); context.header("Content-Disposition", "filename=" + context.pathParam("file")); - String filePath = context.queryParam("filePath"); - if(filePath == null) + String filePath = context.queryParam("filePath"); + String storageTableName = context.queryParam("storageTableName"); + String reference = context.queryParam("storageReference"); + + if(filePath != null) { - throw (new QBadRequestException("A filePath was not provided.")); + context.result(new FileInputStream(filePath)); } - context.result(new FileInputStream(filePath)); + else if(storageTableName != null && reference != null) + { + InputStream inputStream = new StorageAction().getInputStream(new StorageInput(storageTableName).withReference(reference)); + context.result(inputStream); + } + else + { + throw (new QBadRequestException("Missing query parameters to identify file to download")); + } + } catch(Exception e) {