You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by di...@apache.org on 2024/12/16 14:17:46 UTC
(airavata) branch file-server updated: Support to upload files
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 <di...@gmail.com>
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);