diff --git a/CHANGELOG.md b/CHANGELOG.md index 95e3c0075..d976aef72 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,6 +47,9 @@ If any files are returned, you should check to see if these files affected and a - If using S3 storage in docker, it was not reflected correctly in the docker-compose file. - Docker image for mongo-init now based on python:3.7-slim to reduce size. +### Added +- Endpoint '/api/files/uploadToDataset' now allows folder_id for uploading file to folder. [#232](https://github.com/clowder-framework/clowder/issues/232) + ## 1.17.0 - 2021-04-29 ### Fixed diff --git a/app/api/Files.scala b/app/api/Files.scala index b9bae4130..f19084dd9 100644 --- a/app/api/Files.scala +++ b/app/api/Files.scala @@ -523,10 +523,16 @@ class Files @Inject()( /** * Upload a file to a specific dataset */ - def uploadToDataset(dataset_id: UUID, showPreviews: String = "DatasetLevel", originalZipFile: String = "", flagsFromPrevious: String = "", extract: Boolean = true) = PermissionAction(Permission.AddResourceToDataset, Some(ResourceRef(ResourceRef.dataset, dataset_id)))(parse.multipartFormData) { implicit request => + def uploadToDataset(dataset_id: UUID, showPreviews: String = "DatasetLevel", originalZipFile: String = "", flagsFromPrevious: String = "", extract: Boolean = true, folder_id: Option[String]) = PermissionAction(Permission.AddResourceToDataset, Some(ResourceRef(ResourceRef.dataset, dataset_id)))(parse.multipartFormData) { implicit request => datasets.get(dataset_id) match { case Some(dataset) => { - val uploadedFiles = FileUtils.uploadFilesMultipart(request, Some(dataset), showPreviews = showPreviews, originalZipFile = originalZipFile, flagsFromPrevious = flagsFromPrevious, runExtractors = extract, apiKey = request.apiKey) + var current_folder : Option[Folder] = None + if (folder_id != None) { + if (UUID.isValid(folder_id.get)){ + current_folder = folders.get(UUID(folder_id.get)) + } + } + val uploadedFiles = FileUtils.uploadFilesMultipart(request, Some(dataset), current_folder, showPreviews = showPreviews, originalZipFile = originalZipFile, flagsFromPrevious = flagsFromPrevious, runExtractors = extract, apiKey = request.apiKey) uploadedFiles.length match { case 0 => BadRequest("No files uploaded") case 1 => Ok(Json.obj("id" -> uploadedFiles.head.id)) diff --git a/conf/routes b/conf/routes index 519ee1cc1..333fd699a 100644 --- a/conf/routes +++ b/conf/routes @@ -377,8 +377,8 @@ POST /api/files POST /api/files/withFlags/:flags @api.Files.upload(showPreviews: String ?= "DatasetLevel", originalZipFile: String ?= "", flags: String) POST /api/files/searchusermetadata @api.Files.searchFilesUserMetadata POST /api/files/searchmetadata @api.Files.searchFilesGeneralMetadata -POST /api/uploadToDataset/withFlags/:id/:flags @api.Files.uploadToDataset(id: UUID, showPreviews: String ?= "DatasetLevel", originalZipFile: String ?= "", flags: String, extract: Boolean ?= true) -POST /api/uploadToDataset/:id @api.Files.uploadToDataset(id: UUID, showPreviews: String ?= "DatasetLevel", originalZipFile: String ?= "", flags: String ?= "", extract: Boolean ?= true) +POST /api/uploadToDataset/withFlags/:id/:flags @api.Files.uploadToDataset(id: UUID, showPreviews: String ?= "DatasetLevel", originalZipFile: String ?= "", flags: String, extract: Boolean ?= true, folder_id: Option[String] ?= None) +POST /api/uploadToDataset/:id @api.Files.uploadToDataset(id: UUID, showPreviews: String ?= "DatasetLevel", originalZipFile: String ?= "", flags: String ?= "", extract: Boolean ?= true, folder_id: Option[String] ?= None) PUT /api/files/:id/updateDescription @api.Files.updateDescription(id: UUID) POST /api/files/uploadIntermediate/:idAndFlags @api.Files.uploadIntermediate(idAndFlags) POST /api/files/sendJob/:fileId/:fileType @api.Files.sendJob(fileId: UUID,fileType) diff --git a/public/swagger.yml b/public/swagger.yml index 1580e9358..b904aeae9 100644 --- a/public/swagger.yml +++ b/public/swagger.yml @@ -554,6 +554,10 @@ paths: in: query schema: type: boolean + - name: folder_id + in: query + schema: + type: string requestBody: content: multipart/form-data: