This is an automated email from the ASF dual-hosted git repository.

dimuthuupe pushed a commit to branch file-server
in repository https://gitbox.apache.org/repos/asf/airavata.git


The following commit(s) were added to refs/heads/file-server by this push:
     new bab29399b0 Support to upload files
bab29399b0 is described below

commit bab29399b0c539e51502333cc0c0d5e79917b799
Author: DImuthuUpe <[email protected]>
AuthorDate: Mon Dec 16 09:17:40 2024 -0500

    Support to upload files
---
 .../file/server/controller/FileController.java     | 32 ++++++++++++----------
 .../file/server/service/AirvataFileService.java    | 29 ++++++++++++++++++--
 2 files changed, 44 insertions(+), 17 deletions(-)

diff --git 
a/modules/file-server/src/main/java/org/apache/airavata/file/server/controller/FileController.java
 
b/modules/file-server/src/main/java/org/apache/airavata/file/server/controller/FileController.java
index b735da7765..973242f39d 100644
--- 
a/modules/file-server/src/main/java/org/apache/airavata/file/server/controller/FileController.java
+++ 
b/modules/file-server/src/main/java/org/apache/airavata/file/server/controller/FileController.java
@@ -13,7 +13,6 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
 
 import java.io.File;
 import java.nio.file.Path;
@@ -50,9 +49,9 @@ public class FileController {
         }
     }
 
-    @GetMapping("/download/{isLive}/{processId}/{subPath}")
+    @GetMapping("/download/{live}/{processId}/{subPath}")
     @ResponseBody
-    public ResponseEntity downloadFile(@PathVariable String isLive,
+    public ResponseEntity downloadFile(@PathVariable String live,
                                                  @PathVariable String 
processId,
                                                  @PathVariable String subPath) 
{
 
@@ -64,24 +63,27 @@ public class FileController {
                             "attachment; filename=\"" + new 
File(subPath).getName() + "\"")
                     .body(resource);
         } catch (Exception e) {
+            logger.error("Failed to download file {} from process {}", 
subPath, processId, e);
             return ResponseEntity.internalServerError()
                     .body("An internal server error occurred: " + 
e.getMessage());
         }
     }
 
-
-    @PostMapping("/upload-file")
+    @PostMapping("/upload/{live}/{processId}/{subPath}")
     @ResponseBody
-    public FileUploadResponse uploadFile(@RequestParam("file") MultipartFile 
file) {
-        String name = "";
-
-        String uri = ServletUriComponentsBuilder.fromCurrentContextPath()
-                .path("/download/")
-                .path(name)
-                .toUriString();
+    public ResponseEntity uploadFile(@PathVariable String live,
+                                         @PathVariable String processId,
+                                         @PathVariable String subPath,
+                                         @RequestParam("file") MultipartFile 
file) {
+        try {
+            String name = file.getName();
+            fileService.uploadFile(processId, subPath, file);
+            return ResponseEntity.ok(new FileUploadResponse(name, subPath, 
file.getContentType(), file.getSize()));
 
-        return new FileUploadResponse(name, uri, file.getContentType(), 
file.getSize());
+        } catch (Exception e) {
+            logger.error("Failed to upload file {} to process {}", subPath, 
processId, e);
+            return ResponseEntity.internalServerError()
+                    .body("An internal server error occurred: " + 
e.getMessage());
+        }
     }
-
-
 }
diff --git 
a/modules/file-server/src/main/java/org/apache/airavata/file/server/service/AirvataFileService.java
 
b/modules/file-server/src/main/java/org/apache/airavata/file/server/service/AirvataFileService.java
index 949d59c77b..99cc9cb7e0 100644
--- 
a/modules/file-server/src/main/java/org/apache/airavata/file/server/service/AirvataFileService.java
+++ 
b/modules/file-server/src/main/java/org/apache/airavata/file/server/service/AirvataFileService.java
@@ -11,11 +11,11 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
-import java.io.File;
-import java.io.InputStream;
 import java.nio.file.Files;
 import java.nio.file.Path;
+import java.nio.file.StandardCopyOption;
 import java.util.List;
 
 @Service
@@ -58,6 +58,31 @@ public class AirvataFileService {
 
         return airavataDirectory;
     }
+
+    public void uploadFile(String processId, String subPath, MultipartFile 
file) throws Exception {
+
+        Path tempFile = Files.createTempFile("tempfile_", ".data");
+        tempFile.toFile().deleteOnExit();
+        Files.copy(file.getInputStream(), tempFile, 
StandardCopyOption.REPLACE_EXISTING);
+
+        ProcessDataManager dataManager = new 
ProcessDataManager(registryClientPool, processId, adaptorSupport);
+
+        AgentAdaptor agentAdaptor = getAgentAdaptor(dataManager, processId);
+        subPath = dataManager.getBaseDir() + (subPath.isEmpty()? "" : "/" + 
subPath);
+
+        try {
+            agentAdaptor.uploadFile(tempFile.toFile().getAbsolutePath(), 
subPath);
+        } catch (Exception e) {
+            logger.error("Failed to upload file {} from local path to process 
path {}",
+                    tempFile.toFile().getAbsolutePath(), subPath);
+            try {
+                tempFile.toFile().delete();
+            } catch (Exception ignore) {
+                // Ignore
+            }
+            throw e;
+        }
+    }
     public Path downloadFile(String processId, String subPath) throws 
Exception {
 
         ProcessDataManager dataManager = new 
ProcessDataManager(registryClientPool, processId, adaptorSupport);

Reply via email to