From dc2060faec7c453c88b271d9e020dfb6eabbda6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20G=C3=B6bel?= <dgoebel@techfak.uni-bielefeld.de> Date: Wed, 24 Apr 2024 13:38:50 +0200 Subject: [PATCH] Abort a multipart upload if it fails #113 --- src/stores/s3objects.ts | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/stores/s3objects.ts b/src/stores/s3objects.ts index 149a3eb..29a7e10 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, -- GitLab