diff --git a/test/test.ts b/test/test.ts index d73f5aa..3195abd 100644 --- a/test/test.ts +++ b/test/test.ts @@ -76,6 +76,14 @@ tap.test('should correctly build paths for sub directories', async () => { console.log(dir4BasePath); }); +tap.test('should list huge file directory', async () => { + const servezoneBucket = await smartbucket.Bucket.getBucketByName(testSmartbucket, 'servezone'); + const servezoneBaseDirectory = await servezoneBucket.getBaseDirectory(); + this.brandfileDirectory = await servezoneBaseDirectory.getSubDirectoryByName('brandfiles'); + const files = servezoneBaseDirectory.listFiles(); + console.log(files) +}); + tap.test('clean up directory style tests', async () => { await myBucket.fastRemove('dir1/file1.txt'); await myBucket.fastRemove('dir1/file2.txt'); diff --git a/ts/smartbucket.classes.directory.ts b/ts/smartbucket.classes.directory.ts index 99fc6a8..7b2c580 100644 --- a/ts/smartbucket.classes.directory.ts +++ b/ts/smartbucket.classes.directory.ts @@ -44,7 +44,7 @@ export class Directory { let basePath = ''; for (const parentDir of parentDirectories) { if (parentDir.name === '') { - basePath = this.name; + basePath = this.name + '/'; continue; } basePath = parentDir.name + '/' + this.name; @@ -57,13 +57,17 @@ export class Directory { */ public async listFiles(): Promise { const done = plugins.smartpromise.defer(); - const fileNameStream = await this.bucketRef.smartbucketRef.minioClient.listObjects( + const fileNameStream = await this.bucketRef.smartbucketRef.minioClient.listObjectsV2( this.bucketRef.name, - this.getBasePath() + this.getBasePath(), + false ); const fileArray: File[] = []; const duplexStream = plugins.streamfunction.createDuplexStream( async bucketItem => { + if (bucketItem.prefix) { + return; + } if (!bucketItem.name) { return; } @@ -89,15 +93,19 @@ export class Directory { */ public async listDirectories(): Promise { const done = plugins.smartpromise.defer(); - const completeDirStream = await this.bucketRef.smartbucketRef.minioClient.listObjects( + const basePath = this.getBasePath(); + const completeDirStream = await this.bucketRef.smartbucketRef.minioClient.listObjectsV2( this.bucketRef.name, this.getBasePath(), - true + false ); const directoryArray: Directory[] = []; const duplexStream = plugins.streamfunction.createDuplexStream( async bucketItem => { - let subtractedPath = bucketItem.name.replace(this.getBasePath(), ''); + if (bucketItem.name) { + return; + } + let subtractedPath = bucketItem.prefix.replace(this.getBasePath(), ''); if (subtractedPath.startsWith('/')) { subtractedPath = subtractedPath.substr(1); } @@ -122,7 +130,7 @@ export class Directory { * gets an array that has all objects with a certain prefix; */ public async getTreeArray() { - const treeArray = await this.bucketRef.smartbucketRef.minioClient.listObjects( + const treeArray = await this.bucketRef.smartbucketRef.minioClient.listObjectsV2( this.bucketRef.name, this.getBasePath(), true