fix(server): blob upload (#15474)
This commit is contained in:
@@ -133,6 +133,7 @@ export async function createBlobUpload(
|
|||||||
createBlobUpload(workspaceId: $workspaceId, key: $key, size: $size, mime: $mime) {
|
createBlobUpload(workspaceId: $workspaceId, key: $key, size: $size, mime: $mime) {
|
||||||
method
|
method
|
||||||
blobKey
|
blobKey
|
||||||
|
alreadyUploaded
|
||||||
uploadUrl
|
uploadUrl
|
||||||
uploadId
|
uploadId
|
||||||
partSize
|
partSize
|
||||||
|
|||||||
@@ -286,6 +286,15 @@ test('should create pending blob upload with graphql fallback', async t => {
|
|||||||
t.truthy(record);
|
t.truthy(record);
|
||||||
t.is(record?.status, 'pending');
|
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);
|
const listed = await listBlobs(app, workspace.id);
|
||||||
t.is(listed.length, 0);
|
t.is(listed.length, 0);
|
||||||
});
|
});
|
||||||
@@ -317,6 +326,15 @@ test('should complete pending blob upload', async t => {
|
|||||||
|
|
||||||
const listed = await listBlobs(app, workspace.id);
|
const listed = await listBlobs(app, workspace.id);
|
||||||
t.is(listed.length, 1);
|
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 => {
|
test('should reject complete when blob key mismatched', async t => {
|
||||||
|
|||||||
@@ -215,9 +215,6 @@ export class WorkspaceBlobResolver {
|
|||||||
if (record.size !== size) {
|
if (record.size !== size) {
|
||||||
throw new BlobInvalid('Blob size mismatch');
|
throw new BlobInvalid('Blob size mismatch');
|
||||||
}
|
}
|
||||||
if (record.mime !== mime) {
|
|
||||||
throw new BlobInvalid('Blob mime mismatch');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (record.status === 'completed') {
|
if (record.status === 'completed') {
|
||||||
const existingMetadata = await this.storage.head(workspaceId, key);
|
const existingMetadata = await this.storage.head(workspaceId, key);
|
||||||
@@ -226,8 +223,6 @@ export class WorkspaceBlobResolver {
|
|||||||
record = null;
|
record = null;
|
||||||
} else if (existingMetadata.contentLength !== size) {
|
} else if (existingMetadata.contentLength !== size) {
|
||||||
throw new BlobInvalid('Blob size mismatch');
|
throw new BlobInvalid('Blob size mismatch');
|
||||||
} else if (existingMetadata.contentType !== mime) {
|
|
||||||
throw new BlobInvalid('Blob mime mismatch');
|
|
||||||
} else {
|
} else {
|
||||||
return {
|
return {
|
||||||
method: BlobUploadMethod.GRAPHQL,
|
method: BlobUploadMethod.GRAPHQL,
|
||||||
@@ -235,6 +230,8 @@ export class WorkspaceBlobResolver {
|
|||||||
alreadyUploaded: true,
|
alreadyUploaded: true,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
mime = record.mime;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user