Skip to content

Commit f3f645d

Browse files
committed
[FEATURE] Recursive directories upload for S3 - Fixed
1 parent 148e84f commit f3f645d

File tree

2 files changed

+31
-12
lines changed

2 files changed

+31
-12
lines changed

components/aws/actions/s3-upload-file-tmp/s3-upload-file-tmp.mjs

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export default {
1212
Accepts a file path or folder path starting from /tmp, then uploads the contents to S3.
1313
[See the docs](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)
1414
`),
15-
version: "1.0.2",
15+
version: "1.0.3",
1616
type: "action",
1717
props: {
1818
aws: common.props.aws,
@@ -44,27 +44,46 @@ export default {
4444
},
4545
methods: {
4646
...common.methods,
47+
getFilesRecursive(dir) {
48+
let results = [];
49+
const items = fs.readdirSync(dir);
50+
for (const item of items) {
51+
const itemPath = join(dir, item);
52+
const stat = fs.statSync(itemPath);
53+
if (stat.isDirectory()) {
54+
results = results.concat(this.getFilesRecursive(itemPath));
55+
} else {
56+
results.push(itemPath);
57+
}
58+
}
59+
return results;
60+
},
4761
async uploadFolderFiles($) {
4862
const {
4963
uploadFile,
5064
bucket,
5165
folderPath,
5266
prefix,
5367
} = this;
54-
55-
const files = fs.readdirSync(folderPath);
56-
const promises = [];
57-
for (const filename of files) {
58-
const fileContent = fs.readFileSync(join(folderPath, filename), {
68+
const files = this.getFilesRecursive(folderPath);
69+
const response = await Promise.all(files.map(async (filePath) => {
70+
const fileContent = fs.readFileSync(filePath, {
5971
encoding: "base64",
6072
});
61-
promises.push(uploadFile({
73+
const relativePath = filePath.substring(folderPath.length + 1);
74+
const s3Key = join(prefix, relativePath);
75+
76+
await uploadFile({
6277
Bucket: bucket,
63-
Key: join(prefix, filename),
78+
Key: s3Key,
6479
Body: Buffer.from(fileContent, "base64"),
65-
}));
66-
}
67-
const response = await Promise.all(promises);
80+
});
81+
return {
82+
filePath,
83+
s3Key,
84+
status: "uploaded",
85+
};
86+
}));
6887
$.export("$summary", `Uploaded all files from ${folderPath} to S3`);
6988
return response;
7089
},

components/aws/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@pipedream/aws",
3-
"version": "0.7.4",
3+
"version": "0.7.5",
44
"description": "Pipedream Aws Components",
55
"main": "aws.app.mjs",
66
"keywords": [

0 commit comments

Comments
 (0)