From d9611f9a375a1204488a79b85f98bf1d422cb36f Mon Sep 17 00:00:00 2001 From: tcnichol Date: Fri, 21 May 2021 14:58:12 -0500 Subject: [PATCH 1/9] adding new parameter option string folder id --- app/api/Files.scala | 45 +++++++++++++++++++++++++++++++++++++++------ conf/routes | 4 ++-- 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/app/api/Files.scala b/app/api/Files.scala index 1c8406e0d..5235e82ea 100644 --- a/app/api/Files.scala +++ b/app/api/Files.scala @@ -523,14 +523,47 @@ 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] = None) = 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) - uploadedFiles.length match { - case 0 => BadRequest("No files uploaded") - case 1 => Ok(Json.obj("id" -> uploadedFiles.head.id)) - case _ => Ok(Json.obj("ids" -> uploadedFiles.toList)) + folder_id match { + case Some(id) => { + if (UUID.isValid(id)){ + folders.get(UUID(id)) match { + case Some(folder) => { + val uploadedFiles = FileUtils.uploadFilesMultipart(request, Some(dataset), Some(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)) + case _ => Ok(Json.obj("ids" -> uploadedFiles.toList)) + } + } + case None => { + val uploadedFiles = FileUtils.uploadFilesMultipart(request, Some(dataset), 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)) + case _ => Ok(Json.obj("ids" -> uploadedFiles.toList)) + } + } + } + } else { + val uploadedFiles = FileUtils.uploadFilesMultipart(request, Some(dataset), 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)) + case _ => Ok(Json.obj("ids" -> uploadedFiles.toList)) + } + } + } + case None => { + val uploadedFiles = FileUtils.uploadFilesMultipart(request, Some(dataset), 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)) + case _ => Ok(Json.obj("ids" -> uploadedFiles.toList)) + } + } } } case None => { diff --git a/conf/routes b/conf/routes index 21e6fe83c..e970917bc 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) From 88c7d77f8f600ba882b5e233297a39bea84f9235 Mon Sep 17 00:00:00 2001 From: tcnichol Date: Fri, 21 May 2021 15:05:32 -0500 Subject: [PATCH 2/9] updating swagger.yml --- public/swagger.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/public/swagger.yml b/public/swagger.yml index b4c6cadce..9c708eeac 100644 --- a/public/swagger.yml +++ b/public/swagger.yml @@ -418,6 +418,10 @@ paths: in: query schema: type: boolean + - name: folder_id + in: query + schema: + type: string requestBody: content: multipart/form-data: From 004b96fc63a595f6b1560815ae08f6cb462ec31b Mon Sep 17 00:00:00 2001 From: tcnichol Date: Mon, 24 May 2021 13:32:53 -0500 Subject: [PATCH 3/9] using opion[uuid] instead of option[string] --- app/api/Files.scala | 39 +++++++++++++++------------------------ conf/routes | 2 +- 2 files changed, 16 insertions(+), 25 deletions(-) diff --git a/app/api/Files.scala b/app/api/Files.scala index 5235e82ea..6e7089951 100644 --- a/app/api/Files.scala +++ b/app/api/Files.scala @@ -523,36 +523,27 @@ 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, folder_id: Option[String] = None) = 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[UUID]) = PermissionAction(Permission.AddResourceToDataset, Some(ResourceRef(ResourceRef.dataset, dataset_id)))(parse.multipartFormData) { implicit request => datasets.get(dataset_id) match { case Some(dataset) => { folder_id match { case Some(id) => { - if (UUID.isValid(id)){ - folders.get(UUID(id)) match { - case Some(folder) => { - val uploadedFiles = FileUtils.uploadFilesMultipart(request, Some(dataset), Some(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)) - case _ => Ok(Json.obj("ids" -> uploadedFiles.toList)) - } - } - case None => { - val uploadedFiles = FileUtils.uploadFilesMultipart(request, Some(dataset), 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)) - case _ => Ok(Json.obj("ids" -> uploadedFiles.toList)) - } + folders.get(id) match { + case Some(folder) => { + val uploadedFiles = FileUtils.uploadFilesMultipart(request, Some(dataset),Some(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)) + case _ => Ok(Json.obj("ids" -> uploadedFiles.toList)) } } - } else { - val uploadedFiles = FileUtils.uploadFilesMultipart(request, Some(dataset), 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)) - case _ => Ok(Json.obj("ids" -> uploadedFiles.toList)) + case None => { + val uploadedFiles = FileUtils.uploadFilesMultipart(request, Some(dataset), 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)) + case _ => Ok(Json.obj("ids" -> uploadedFiles.toList)) + } } } } diff --git a/conf/routes b/conf/routes index e970917bc..c3e9b5758 100644 --- a/conf/routes +++ b/conf/routes @@ -377,7 +377,7 @@ 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, folder_id: Option[String] ?= None) +POST /api/uploadToDataset/withFlags/:id/:flags @api.Files.uploadToDataset(id: UUID, showPreviews: String ?= "DatasetLevel", originalZipFile: String ?= "", flags: String, extract: Boolean ?= true, folder_id: Option[UUID] ?= 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) From 4cde26ac3baa5ec2df83f26b8bf97a490847271c Mon Sep 17 00:00:00 2001 From: tcnichol Date: Mon, 24 May 2021 14:41:03 -0500 Subject: [PATCH 4/9] using opion[uuid] instead of option[string] --- app/api/Files.scala | 37 +++++++------------------------------ conf/routes | 2 +- 2 files changed, 8 insertions(+), 31 deletions(-) diff --git a/app/api/Files.scala b/app/api/Files.scala index 6e7089951..28eb28554 100644 --- a/app/api/Files.scala +++ b/app/api/Files.scala @@ -523,38 +523,15 @@ 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, folder_id : Option[UUID]) = 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[UUID]) = PermissionAction(Permission.AddResourceToDataset, Some(ResourceRef(ResourceRef.dataset, dataset_id)))(parse.multipartFormData) { implicit request => datasets.get(dataset_id) match { case Some(dataset) => { - folder_id match { - case Some(id) => { - folders.get(id) match { - case Some(folder) => { - val uploadedFiles = FileUtils.uploadFilesMultipart(request, Some(dataset),Some(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)) - case _ => Ok(Json.obj("ids" -> uploadedFiles.toList)) - } - } - case None => { - val uploadedFiles = FileUtils.uploadFilesMultipart(request, Some(dataset), 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)) - case _ => Ok(Json.obj("ids" -> uploadedFiles.toList)) - } - } - } - } - case None => { - val uploadedFiles = FileUtils.uploadFilesMultipart(request, Some(dataset), 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)) - case _ => Ok(Json.obj("ids" -> uploadedFiles.toList)) - } - } + val folder = folder_id.flatMap(x => folders.get(x)) + val uploadedFiles = FileUtils.uploadFilesMultipart(request, Some(dataset), 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)) + case _ => Ok(Json.obj("ids" -> uploadedFiles.toList)) } } case None => { diff --git a/conf/routes b/conf/routes index c3e9b5758..b8013b7f2 100644 --- a/conf/routes +++ b/conf/routes @@ -378,7 +378,7 @@ POST /api/files/withFlags/:flags 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, folder_id: Option[UUID] ?= 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) +POST /api/uploadToDataset/:id @api.Files.uploadToDataset(id: UUID, showPreviews: String ?= "DatasetLevel", originalZipFile: String ?= "", flags: String ?= "", extract: Boolean ?= true, folder_id: Option[UUID] ?= 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) From 488f6a8417599c85be863194f47a2c8c4095d56a Mon Sep 17 00:00:00 2001 From: tcnichol Date: Mon, 24 May 2021 15:01:23 -0500 Subject: [PATCH 5/9] changing option[uuid] to option[string] --- app/api/Files.scala | 4 ++-- conf/routes | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/api/Files.scala b/app/api/Files.scala index 28eb28554..2e0b15b8a 100644 --- a/app/api/Files.scala +++ b/app/api/Files.scala @@ -523,10 +523,10 @@ 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, folder_id: Option[UUID]) = 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 folder = folder_id.flatMap(x => folders.get(x)) + val folder = folder_id.flatMap(x => folders.get(UUID(x))) val uploadedFiles = FileUtils.uploadFilesMultipart(request, Some(dataset), folder, showPreviews = showPreviews, originalZipFile = originalZipFile, flagsFromPrevious = flagsFromPrevious, runExtractors = extract, apiKey = request.apiKey) uploadedFiles.length match { case 0 => BadRequest("No files uploaded") diff --git a/conf/routes b/conf/routes index b8013b7f2..e970917bc 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, folder_id: Option[UUID] ?= None) -POST /api/uploadToDataset/:id @api.Files.uploadToDataset(id: UUID, showPreviews: String ?= "DatasetLevel", originalZipFile: String ?= "", flags: String ?= "", extract: Boolean ?= true, folder_id: Option[UUID] ?= None) +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) From 017438782b7193991fe9c2d876cbf71bfedb82a3 Mon Sep 17 00:00:00 2001 From: tcnichol Date: Mon, 24 May 2021 15:30:10 -0500 Subject: [PATCH 6/9] breaks if x is not a proper UUID --- app/api/Files.scala | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/api/Files.scala b/app/api/Files.scala index 2e0b15b8a..bd7330c95 100644 --- a/app/api/Files.scala +++ b/app/api/Files.scala @@ -526,7 +526,9 @@ class Files @Inject()( 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 folder = folder_id.flatMap(x => folders.get(UUID(x))) + val uploadedFiles = FileUtils.uploadFilesMultipart(request, Some(dataset), folder, showPreviews = showPreviews, originalZipFile = originalZipFile, flagsFromPrevious = flagsFromPrevious, runExtractors = extract, apiKey = request.apiKey) uploadedFiles.length match { case 0 => BadRequest("No files uploaded") From 725473e882aef32619db0857e74b6c54bbde49f7 Mon Sep 17 00:00:00 2001 From: tcnichol Date: Mon, 24 May 2021 16:15:48 -0500 Subject: [PATCH 7/9] fix that handles case of folder_id string is present but not uuid --- app/api/Files.scala | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/api/Files.scala b/app/api/Files.scala index bd7330c95..87a171e35 100644 --- a/app/api/Files.scala +++ b/app/api/Files.scala @@ -527,9 +527,14 @@ class Files @Inject()( datasets.get(dataset_id) match { case Some(dataset) => { - val folder = folder_id.flatMap(x => folders.get(UUID(x))) - val uploadedFiles = FileUtils.uploadFilesMultipart(request, Some(dataset), folder, showPreviews = showPreviews, originalZipFile = originalZipFile, flagsFromPrevious = flagsFromPrevious, runExtractors = extract, apiKey = request.apiKey) + val current_folder = if (UUID.isValid(folder_id.get)){ + folders.get(UUID(folder_id.get)) + } else { + None + } + + 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)) From 8a8df19baaa383543c963324b5bc1bfa8e92a0a0 Mon Sep 17 00:00:00 2001 From: tcnichol Date: Mon, 24 May 2021 18:00:26 -0500 Subject: [PATCH 8/9] getting rid of blank lines --- app/api/Files.scala | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/api/Files.scala b/app/api/Files.scala index 87a171e35..944dc580e 100644 --- a/app/api/Files.scala +++ b/app/api/Files.scala @@ -526,14 +526,11 @@ class Files @Inject()( 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 current_folder = if (UUID.isValid(folder_id.get)){ folders.get(UUID(folder_id.get)) } else { None } - 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") From cb941eaa0df39b1c7f683f51d8e6adc6fbc4802f Mon Sep 17 00:00:00 2001 From: tcnichol Date: Sun, 11 Jul 2021 15:44:55 -0500 Subject: [PATCH 9/9] fixed endpoint, added changelog entry --- CHANGELOG.md | 3 +++ app/api/Files.scala | 9 +++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c428d6a5b..d7d7b8251 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Fixed - Added index for comments, will speed up index creation +### 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 944dc580e..bdb67299b 100644 --- a/app/api/Files.scala +++ b/app/api/Files.scala @@ -526,10 +526,11 @@ class Files @Inject()( 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 current_folder = if (UUID.isValid(folder_id.get)){ - folders.get(UUID(folder_id.get)) - } else { - None + 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 {