diff --git a/src/backend/src/modules/convert/ConvertAPIService.js b/src/backend/src/modules/convert/ConvertAPIService.js index 07a071f93..272005f8e 100644 --- a/src/backend/src/modules/convert/ConvertAPIService.js +++ b/src/backend/src/modules/convert/ConvertAPIService.js @@ -1,3 +1,4 @@ +const { HLWrite } = require("../../filesystem/hl_operations/hl_write"); const { LLRead } = require("../../filesystem/ll_operations/ll_read"); const BaseService = require("../../services/BaseService"); const { TypedValue } = require("../../services/drivers/meta/Runtime"); @@ -27,7 +28,15 @@ class ConvertAPIService extends BaseService { }, source: { type: 'file', + required: true, }, + + // File output mode + dest: { + type: 'file', + }, + overwrite: { type: 'flag' }, + dedupe_name: { type: 'flag' }, }, result_choices: [ { @@ -52,7 +61,13 @@ class ConvertAPIService extends BaseService { static IMPLEMENTS = { ['convert-files']: { - async convert ({ from, to, source }) { + async convert ({ + // Require parameters + from, to, source, + + // File Output Mode + dest, overwrite, dedupe_name, + }) { const convertapi = this.convertapi; const axios = this.require('axios'); @@ -78,6 +93,22 @@ class ConvertAPIService extends BaseService { responseType: 'stream', }); + if ( dest !== undefined ) { + const hl_write = new HLWrite(); + return await hl_write.run({ + destination_or_parent: await dest.get('fs-node'), + fallback_name: fileInfo.FileName, + overwrite, + dedupe_name, + file: { + originalname: fileInfo.FileName, + stream: downloadResponse.data, + size: fileInfo.FileSize, + }, + actor: Context.get('actor'), + }); + } + return new TypedValue({ $: 'stream', content_type: mime.contentType(fileInfo.FileName), diff --git a/src/backend/src/services/drivers/types.js b/src/backend/src/services/drivers/types.js index 34d0d3f25..e9146ca8e 100644 --- a/src/backend/src/services/drivers/types.js +++ b/src/backend/src/services/drivers/types.js @@ -226,6 +226,8 @@ class File extends BaseType { * @throws {APIError} If input format is invalid */ async consolidate (ctx, input, { arg_name }) { + if ( input === undefined ) return undefined; + if ( input instanceof FileFacade ) { return input; }