From 23f447c0ed472f843b80f779c5f873ffa5a12417 Mon Sep 17 00:00:00 2001 From: Matt Wise Date: Sun, 11 Feb 2024 23:19:14 -0600 Subject: [PATCH] fix s3 downloads resulting in flat folder structure Signed-off-by: Matt Wise --- packages/backend-common/src/reading/AwsS3UrlReader.ts | 3 ++- .../src/reading/tree/ReadableArrayResponse.ts | 11 ++++------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/backend-common/src/reading/AwsS3UrlReader.ts b/packages/backend-common/src/reading/AwsS3UrlReader.ts index 23ef0f7b27..3ba4eebb48 100644 --- a/packages/backend-common/src/reading/AwsS3UrlReader.ts +++ b/packages/backend-common/src/reading/AwsS3UrlReader.ts @@ -46,6 +46,7 @@ import { import { AbortController } from '@aws-sdk/abort-controller'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; import { Readable } from 'stream'; +import { relative } from 'path/posix'; export const DEFAULT_REGION = 'us-east-1'; @@ -345,7 +346,7 @@ export class AwsS3UrlReader implements UrlReader { responses.push({ data: s3ObjectData, - path: String(allObjects[i]), + path: relative(path, String(allObjects[i])), lastModifiedAt: response?.LastModified ?? undefined, }); } diff --git a/packages/backend-common/src/reading/tree/ReadableArrayResponse.ts b/packages/backend-common/src/reading/tree/ReadableArrayResponse.ts index 1429931142..3c8bfd1fbc 100644 --- a/packages/backend-common/src/reading/tree/ReadableArrayResponse.ts +++ b/packages/backend-common/src/reading/tree/ReadableArrayResponse.ts @@ -15,7 +15,7 @@ */ import concatStream from 'concat-stream'; -import platformPath, { basename } from 'path'; +import platformPath, { dirname } from 'path'; import getRawBody from 'raw-body'; import fs from 'fs-extra'; @@ -96,12 +96,9 @@ export class ReadableArrayResponse implements ReadTreeResponse { for (let i = 0; i < this.stream.length; i++) { if (!this.stream[i].path.endsWith('/')) { - await pipeline( - this.stream[i].data, - fs.createWriteStream( - platformPath.join(dir, basename(this.stream[i].path)), - ), - ); + const filePath = platformPath.join(dir, this.stream[i].path); + await fs.mkdir(dirname(filePath), { recursive: true }); + await pipeline(this.stream[i].data, fs.createWriteStream(filePath)); } }