fix multiple files not showing
This commit is contained in:
parent
ac36431107
commit
b0cb20d0f4
2 changed files with 1448 additions and 1284 deletions
File diff suppressed because it is too large
Load diff
|
@ -89,6 +89,64 @@ export class FileManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Append multiple files to a record without overriding existing ones
|
||||||
|
* @param collectionName The name of the collection
|
||||||
|
* @param recordId The ID of the record to attach the files to
|
||||||
|
* @param field The field name for the files
|
||||||
|
* @param files Array of files to upload
|
||||||
|
* @returns The updated record
|
||||||
|
*/
|
||||||
|
public async appendFiles<T = any>(
|
||||||
|
collectionName: string,
|
||||||
|
recordId: string,
|
||||||
|
field: string,
|
||||||
|
files: File[]
|
||||||
|
): Promise<T> {
|
||||||
|
if (!this.auth.isAuthenticated()) {
|
||||||
|
throw new Error("User must be authenticated to upload files");
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
this.auth.setUpdating(true);
|
||||||
|
const pb = this.auth.getPocketBase();
|
||||||
|
|
||||||
|
// First, get the current record to check existing files
|
||||||
|
const record = await pb.collection(collectionName).getOne<T>(recordId);
|
||||||
|
|
||||||
|
// Create FormData with existing files
|
||||||
|
const formData = new FormData();
|
||||||
|
|
||||||
|
// Get existing files from the record
|
||||||
|
const existingFiles = (record as any)[field] || [];
|
||||||
|
|
||||||
|
// For each existing file, we need to fetch it and add it to the FormData
|
||||||
|
for (const existingFile of existingFiles) {
|
||||||
|
try {
|
||||||
|
const response = await fetch(this.getFileUrl(collectionName, recordId, existingFile));
|
||||||
|
const blob = await response.blob();
|
||||||
|
const file = new File([blob], existingFile, { type: blob.type });
|
||||||
|
formData.append(field, file);
|
||||||
|
} catch (error) {
|
||||||
|
console.warn(`Failed to fetch existing file ${existingFile}:`, error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Append new files
|
||||||
|
files.forEach(file => {
|
||||||
|
formData.append(field, file);
|
||||||
|
});
|
||||||
|
|
||||||
|
const result = await pb.collection(collectionName).update<T>(recordId, formData);
|
||||||
|
return result;
|
||||||
|
} catch (err) {
|
||||||
|
console.error(`Failed to append files to ${collectionName}:`, err);
|
||||||
|
throw err;
|
||||||
|
} finally {
|
||||||
|
this.auth.setUpdating(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the URL for a file
|
* Get the URL for a file
|
||||||
* @param collectionName The name of the collection
|
* @param collectionName The name of the collection
|
||||||
|
|
Loading…
Reference in a new issue