Proje: Okul B2B App · Hub: Okul B2B App — Incidents

Android Medya Yükleme Sorunu — FileSystem ve XHR Fallback

Semptom

Android’de galeri fotoğrafı yükleme başarısız oluyor. iOS’ta çalışan upload kodu Android’de hata veriyor.

Root Cause

Android’de fetch ile FormData fotoğraf yükleme birden fazla soruna yol açıyor:

  1. file:// URI’lar fetch’te farklı işleniyor
  2. Content-Type multipart boundary otomatik eklenmesi Android’de farklı
  3. XHR ve FileSystem.uploadAsync farklı davranıyor cihaza göre

Çözüm — İki Yedekli Strateji

// 1. Önce expo-file-system.uploadAsync dene (MULTIPART)
const result = await uploadMediaAndroidFileSystem(request);
if (result) return result;
 
// 2. Başarısız olursa XHR ile birden fazla format dene
const xhrResult = await uploadMediaAndroidXHR(request);
if (xhrResult) return xhrResult;
 
// 3. Son çare: fetch ile standart upload

Android FileSystem Özel Header’lar

delete headers['Content-Type'];  // Multipart için kaldır (boundary otomatik)
headers['X-Upload-Platform'] = 'android-filesystem';

XHR File Variants

Android için birden fazla FormData file object formatı denenir:

  1. { uri, type, name } — Standart
  2. { uri, type, name, filePath } — Explicit path
  3. { uri, type, name, data: base64 } — Base64 fallback

Ders

Android medya yükleme için:

  • expo-file-system.uploadAsync(MULTIPART) en güvenilir yöntem
  • XHR fallback ile backup sağla
  • Content-Type header’ını manuel koyma (multipart boundary’yi bozar)