From d5e17c24356bf959432e2b66a390c95993628e25 Mon Sep 17 00:00:00 2001 From: vamsi Date: Thu, 26 Mar 2026 17:21:37 +0530 Subject: [PATCH] fix(http): correctly serialize Blob objects in request bodies and FormData --- android/capacitor/src/main/assets/native-bridge.js | 6 +++--- core/native-bridge.ts | 8 ++++---- ios/Capacitor/Capacitor/assets/native-bridge.js | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/android/capacitor/src/main/assets/native-bridge.js b/android/capacitor/src/main/assets/native-bridge.js index f5e7cc440..000b49a9c 100644 --- a/android/capacitor/src/main/assets/native-bridge.js +++ b/android/capacitor/src/main/assets/native-bridge.js @@ -48,14 +48,14 @@ var nativeBridge = (function (exports) { const newFormData = []; for (const pair of formData.entries()) { const [key, value] = pair; - if (value instanceof File) { + if (value instanceof Blob) { const base64File = await readFileAsBase64(value); newFormData.push({ key, value: base64File, type: 'base64File', contentType: value.type, - fileName: value.name, + fileName: value.name || 'blob', }); } else { @@ -128,7 +128,7 @@ var nativeBridge = (function (exports) { type: 'formData', }; } - else if (body instanceof File) { + else if (body instanceof Blob) { const fileData = await readFileAsBase64(body); return { data: fileData, diff --git a/core/native-bridge.ts b/core/native-bridge.ts index 4fc028f37..915ceae32 100644 --- a/core/native-bridge.ts +++ b/core/native-bridge.ts @@ -18,7 +18,7 @@ import { CapacitorException } from './src/util'; // eslint-disable-next-line let dummy = {}; -const readFileAsBase64 = (file: File): Promise => +const readFileAsBase64 = (file: Blob): Promise => new Promise((resolve, reject) => { const reader = new FileReader(); reader.onloadend = () => { @@ -34,14 +34,14 @@ const convertFormData = async (formData: FormData): Promise => { const newFormData: CapFormDataEntry[] = []; for (const pair of formData.entries()) { const [key, value] = pair; - if (value instanceof File) { + if (value instanceof Blob) { const base64File = await readFileAsBase64(value); newFormData.push({ key, value: base64File, type: 'base64File', contentType: value.type, - fileName: value.name, + fileName: (value as any).name || 'blob', }); } else { newFormData.push({ key, value, type: 'string' }); @@ -110,7 +110,7 @@ const convertBody = async ( data: await convertFormData(body), type: 'formData', }; - } else if (body instanceof File) { + } else if (body instanceof Blob) { const fileData = await readFileAsBase64(body); return { data: fileData, diff --git a/ios/Capacitor/Capacitor/assets/native-bridge.js b/ios/Capacitor/Capacitor/assets/native-bridge.js index f5e7cc440..000b49a9c 100644 --- a/ios/Capacitor/Capacitor/assets/native-bridge.js +++ b/ios/Capacitor/Capacitor/assets/native-bridge.js @@ -48,14 +48,14 @@ var nativeBridge = (function (exports) { const newFormData = []; for (const pair of formData.entries()) { const [key, value] = pair; - if (value instanceof File) { + if (value instanceof Blob) { const base64File = await readFileAsBase64(value); newFormData.push({ key, value: base64File, type: 'base64File', contentType: value.type, - fileName: value.name, + fileName: value.name || 'blob', }); } else { @@ -128,7 +128,7 @@ var nativeBridge = (function (exports) { type: 'formData', }; } - else if (body instanceof File) { + else if (body instanceof Blob) { const fileData = await readFileAsBase64(body); return { data: fileData,