fix(nbstore): improve blob size error handling with human-readable limit (#12027)

Closes: [BS-3332](https://linear.app/affine-design/issue/BS-3332/错误信息)

<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Bug Fixes**
	- Improved error messages when file uploads exceed the allowed size, now showing the maximum file size limit in a human-readable format.
	- Enhanced status updates for oversized files by displaying clear error messages during blob uploads.
- **Style**
	- Error messages for file size limits are now more user-friendly and informative.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
fundon
2025-05-07 01:29:37 +00:00
parent ad7868633d
commit 9702d45c9b
4 changed files with 17 additions and 9 deletions
@@ -95,7 +95,7 @@ export class CloudBlobStorage extends BlobStorageBase {
try {
const blobSizeLimit = await this.getBlobSizeLimit();
if (blob.data.byteLength > blobSizeLimit) {
throw new OverSizeError();
throw new OverSizeError(this.humanReadableBlobSizeLimitCache);
}
await this.connection.gql({
query: setBlobMutation,
@@ -113,10 +113,10 @@ export class CloudBlobStorage extends BlobStorageBase {
throw new OverCapacityError();
}
if (userFriendlyError.is('BLOB_QUOTA_EXCEEDED')) {
throw new OverSizeError();
throw new OverSizeError(this.humanReadableBlobSizeLimitCache);
}
if (userFriendlyError.is('CONTENT_TOO_LARGE')) {
throw new OverSizeError();
throw new OverSizeError(this.humanReadableBlobSizeLimitCache);
}
throw err;
}
@@ -148,6 +148,7 @@ export class CloudBlobStorage extends BlobStorageBase {
}));
}
private humanReadableBlobSizeLimitCache: string | null = null;
private blobSizeLimitCache: number | null = null;
private blobSizeLimitCacheTime = 0;
private async getBlobSizeLimit() {
@@ -164,6 +165,8 @@ export class CloudBlobStorage extends BlobStorageBase {
variables: { id: this.options.id },
});
this.humanReadableBlobSizeLimitCache =
res.workspace.quota.humanReadable.blobLimit;
this.blobSizeLimitCache = res.workspace.quota.blobLimit;
this.blobSizeLimitCacheTime = Date.now();
return this.blobSizeLimitCache;
@@ -16,7 +16,7 @@ export class HttpConnection extends DummyConnection {
const timeout = 15000;
const timeoutId = setTimeout(() => {
abortController.abort('timeout');
abortController.abort(new Error('request timeout'));
}, timeout);
const res = await globalThis