diff --git a/packages/backend/server/src/__tests__/utils/blobs.ts b/packages/backend/server/src/__tests__/utils/blobs.ts index da8f4c0a7a..573ba0c0ce 100644 --- a/packages/backend/server/src/__tests__/utils/blobs.ts +++ b/packages/backend/server/src/__tests__/utils/blobs.ts @@ -133,6 +133,7 @@ export async function createBlobUpload( createBlobUpload(workspaceId: $workspaceId, key: $key, size: $size, mime: $mime) { method blobKey + alreadyUploaded uploadUrl uploadId partSize diff --git a/packages/backend/server/src/__tests__/workspace/blobs.e2e.ts b/packages/backend/server/src/__tests__/workspace/blobs.e2e.ts index 6a8f2c7f47..bda943b3aa 100644 --- a/packages/backend/server/src/__tests__/workspace/blobs.e2e.ts +++ b/packages/backend/server/src/__tests__/workspace/blobs.e2e.ts @@ -286,6 +286,15 @@ test('should create pending blob upload with graphql fallback', async t => { t.truthy(record); t.is(record?.status, 'pending'); + await createBlobUpload( + app, + workspace.id, + key, + size, + 'application/octet-stream' + ); + t.is((await blobModel.get(workspace.id, key))?.mime, mime); + const listed = await listBlobs(app, workspace.id); t.is(listed.length, 0); }); @@ -317,6 +326,15 @@ test('should complete pending blob upload', async t => { const listed = await listBlobs(app, workspace.id); t.is(listed.length, 1); + + const existing = await createBlobUpload( + app, + workspace.id, + key, + buffer.length, + 'audio/x-m4a' + ); + t.true(existing.alreadyUploaded); }); test('should reject complete when blob key mismatched', async t => { diff --git a/packages/backend/server/src/core/workspaces/resolvers/blob.ts b/packages/backend/server/src/core/workspaces/resolvers/blob.ts index bd86b1b07a..d255ca2591 100644 --- a/packages/backend/server/src/core/workspaces/resolvers/blob.ts +++ b/packages/backend/server/src/core/workspaces/resolvers/blob.ts @@ -215,9 +215,6 @@ export class WorkspaceBlobResolver { if (record.size !== size) { throw new BlobInvalid('Blob size mismatch'); } - if (record.mime !== mime) { - throw new BlobInvalid('Blob mime mismatch'); - } if (record.status === 'completed') { const existingMetadata = await this.storage.head(workspaceId, key); @@ -226,8 +223,6 @@ export class WorkspaceBlobResolver { record = null; } else if (existingMetadata.contentLength !== size) { throw new BlobInvalid('Blob size mismatch'); - } else if (existingMetadata.contentType !== mime) { - throw new BlobInvalid('Blob mime mismatch'); } else { return { method: BlobUploadMethod.GRAPHQL, @@ -235,6 +230,8 @@ export class WorkspaceBlobResolver { alreadyUploaded: true, }; } + } else { + mime = record.mime; } }