@@ -6,15 +6,15 @@ import {
66 GetObjectCommand ,
77 HeadBucketCommand ,
88 ListObjectsV2Command ,
9- PutObjectCommand ,
109 S3Client ,
1110} from '@aws-sdk/client-s3'
12- import { getSignedUrl } from '@aws-sdk/s3-request-presigner '
11+ import { Upload } from '@aws-sdk/lib-storage '
1312
13+ import { getSignedUrl } from '@aws-sdk/s3-request-presigner'
1414import * as R from 'remeda'
1515import { z } from 'zod'
1616import { parseEnv , StorageDriver } from '~/lib/storage/defineStorageDriver'
17- import { createTempDir , streamToBuffer } from '~/lib/utils'
17+ import { createTempDir } from '~/lib/utils'
1818
1919export class S3StorageDriver extends StorageDriver {
2020 s3
@@ -96,16 +96,20 @@ export class S3StorageDriver extends StorageDriver {
9696 }
9797
9898 async uploadPart ( opts : { uploadId : string ; partNumber : number ; data : ReadableStream } ) {
99- await this . s3 . send (
100- new PutObjectCommand ( {
99+ const upload = new Upload ( {
100+ client : this . s3 ,
101+ params : {
101102 Bucket : this . bucket ,
102103 Key : this . getUploadPartObjectName ( {
103104 uploadId : opts . uploadId ,
104105 partNumber : opts . partNumber ,
105106 } ) ,
106- Body : await streamToBuffer ( opts . data ) ,
107- } ) ,
108- )
107+ Body : opts . data ,
108+ } ,
109+ partSize : 64 * 1024 * 1024 , // 64 MB
110+ queueSize : 1 ,
111+ } )
112+ await upload . done ( )
109113 }
110114
111115 async completeMultipartUpload ( opts : {
@@ -147,13 +151,17 @@ export class S3StorageDriver extends StorageDriver {
147151 await outputTempFile . close ( )
148152
149153 const readStream = createReadStream ( outputTempFilePath )
150- await this . s3 . send (
151- new PutObjectCommand ( {
154+ const upload = new Upload ( {
155+ client : this . s3 ,
156+ params : {
152157 Bucket : this . bucket ,
153158 Key : this . addBaseFolderPrefix ( opts . finalOutputObjectName ) ,
154159 Body : readStream ,
155- } ) ,
156- )
160+ } ,
161+ partSize : 64 * 1024 * 1024 , // 64 MB
162+ queueSize : 1 ,
163+ } )
164+ await upload . done ( )
157165
158166 await Promise . all ( [
159167 this . cleanupMultipartUpload ( opts . uploadId ) ,
0 commit comments