diff --git a/src/stores/s3objects.ts b/src/stores/s3objects.ts index 149a3eb0bf89f6ffab861d0606b89812d09342a1..29a7e10fd2497e9356dd1a242eee08f8e94d4afb 100644 --- a/src/stores/s3objects.ts +++ b/src/stores/s3objects.ts @@ -1,6 +1,7 @@ import { defineStore } from "pinia"; import type { _Object as S3Object, HeadObjectOutput } from "@aws-sdk/client-s3"; import { + AbortMultipartUploadCommand, CopyObjectCommand, GetObjectCommand, HeadObjectCommand, @@ -237,7 +238,23 @@ export const useS3ObjectStore = defineStore({ if (onProgress != undefined) { parallelUploads3.on("httpUploadProgress", onProgress); } - await parallelUploads3.done(); + try { + await parallelUploads3.done(); + } catch (e) { + // if there is an error with the multipart upload, send an abort multipart upload command + const uploadObject = JSON.parse(JSON.stringify(parallelUploads3)); + if (uploadObject["isMultiPart"] && uploadObject["uploadId"]) { + await this.client.send( + new AbortMultipartUploadCommand({ + // AbortMultipartUploadRequest + Bucket: bucketName, // required + Key: key, // required + UploadId: uploadObject["uploadId"], // required + }), + ); + } + throw e; + } const newObj = { Key: key, Size: file.size ?? 0,