This is pretty awesome! I got it to work!
This is the final code of the js file:
const fs = require('fs-extra');
const mime = require('mime-types');
exports.copyFromNetworkToS3 = async function (options) {
const provider = this.parseRequired(options.provider, 'string', 's3.uploadFile: provider is required.');
const Bucket = this.parseRequired(options.bucket, 'string', 's3.uploadFile: bucket is required.');
const path = this.parseRequired(options.path, 'string', 's3.uploadFile: path is required.');
const Key = this.parseRequired(options.key, 'string', 's3.uploadFile: key is required.');
const ContentType = mime.lookup(Key) || 'application/octet-stream';
const ACL = this.parseOptional(options.acl, 'string', null);
const s3 = this.getS3Provider(provider);
if (!s3) throw new Error(`S3 provider "${provider}" doesn't exist.`);
let Body = await fs.readFile(path);
return s3.putObject({ Bucket, ACL, Key, ContentType, Body }).promise();
}
This is my current hjson file:
{
type: 'copyFromNetworkToS3',
module : 'copyFromNetworkToS3',
action : 'copyFromNetworkToS3',
groupTitle : 'My Modules',
groupIcon : 'fas fa-lg fa-project-diagram comp-images',
title : 'Copy file to S3',
icon : 'fas fa-lg fa-copy comp-images',
dataPickObject: true,
properties : [
{
group: 'Copy file to S3',
variables: [
{ name: 'provider', optionName: 'provider', title: 'Provider', type: 'text', required: true, defaultValue: ''},
{ name: 'name', optionName: 'name', title: 'Name', type: 'text', required: true, defaultValue: 'transferFile', help: 'help'},
{ name: 'bucket', optionName: 'bucket', title: 'Bucket', type: 'text', required: true, defaultValue: '', serverDataBindings: true,
help: 'help'},
{ name: 'key', optionName: 'key', title: 'Key', type: 'text', required: true, defaultValue: '', serverDataBindings: true,
help: 'help'},
{ name: 'path', optionName: 'path', title: 'Path', type: 'text', required: true, defaultValue: '', serverDataBindings: true,
help: 'help'},
{ name: 'acl', optionName: 'acl', title: 'Access',
type: 'droplist',
values: [
{title: 'Private', value: 'private'},
{title: 'Public Read', value: 'public-read'},
], defaultValue: '',
help: 'help'
,}
{ name: 'output', optionName: 'output', title: 'Output', type: 'boolean', defaultValue: false }
]
}
]
}
I will make the module available for download as soon as I get the hjson file ready.
Thank you for your help @patrick