fix: use _payload JSON field for Payload CMS upload

Payload CMS REST API requires document data (alt, tenant, etc.) as a
JSON string in a _payload form field, not as individual form fields.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Martin Porwoll 2026-03-01 10:21:44 +00:00
parent 7d78cbb208
commit f148856b1d

View file

@ -100,9 +100,14 @@ class PayloadClient {
async uploadMedia(file: Buffer, filename: string, mimeType: string, options: MediaUploadOptions): Promise<MediaDoc> {
const formData = new FormData();
formData.append('alt', options.alt);
if (options.caption) formData.append('caption', options.caption);
formData.append('tenant', String(options.tenantId));
// Payload CMS requires document data as JSON in the _payload field
const payloadData: Record<string, unknown> = {
alt: options.alt,
tenant: options.tenantId,
};
if (options.caption) payloadData.caption = options.caption;
formData.append('_payload', JSON.stringify(payloadData));
const arrayBuffer = new ArrayBuffer(file.byteLength);
new Uint8Array(arrayBuffer).set(file);