Ошибка [Ошибка: Создание Blobs из «ArrayBuffer» и «ArrayBufferview» не поддерживается]Javascript

Форум по Javascript
Ответить
Anonymous
 Ошибка [Ошибка: Создание Blobs из «ArrayBuffer» и «ArrayBufferview» не поддерживается]

Сообщение Anonymous »

Я пытаюсь загрузить изображения с моего устройства Galery в мое приложение React Native Expo с помощью Firebase, но я получаю ошибку OnSubmitCreatEService [Ошибка: создание каплей из «ArrayBuffer» и «ArrayBufferview» не поддерживается]. Может ли кто -нибудь помочь мне решить это, пожалуйста? Однажды я загружаю изображение и проверяю форму. Вот функции PickImage, загрузить и отправлять < /p>
async function pickImageFromLibrary() {
try {
await requestMediaLibraryPermission();

const result = await ImagePicker.launchImageLibraryAsync({
mediaTypes: ImagePicker.MediaTypeOptions.Images,
allowsEditing: true,
quality: 0.9,
});
if (result.canceled) return;

const pickedAsset = result.assets[0];

// Redimensionner / compresser et forcer JPEG
const manipulatedImage = await ImageManipulator.manipulateAsync(
pickedAsset.uri,
[{ resize: { width: 1200 } }],
{ compress: 0.8, format: ImageManipulator.SaveFormat.JPEG }
);

// S’assurer d’un schéma file://
let fileUri = manipulatedImage.uri;
if (!fileUri.startsWith('file://')) {
const target = FileSystem.cacheDirectory + `service-${Date.now()}.jpg`;
await FileSystem.copyAsync({ from: fileUri, to: target });
fileUri = target;
}

setLocalImageUri(fileUri);
} catch (error) {
console.log('pickImageFromLibrary error', error);
Alert.alert('Image', 'Impossible d’ouvrir la galerie.');
}
}

async function uploadImageAndGetUrl(fileUri, workerId) {
setIsUploadingImage(true);
try {
const path = `services/${workerId}/${Date.now()}-${Math.random().toString(36).slice(2, 7)}.jpg`;
const base64 = await FileSystem.readAsStringAsync(fileUri, { encoding: FileSystem.EncodingType.Base64 });
const ref = createStorageRef(firebaseStorage, path);
const dataUrl = `data:image/jpeg;base64,${base64}`;
await uploadString(ref, dataUrl, 'data_url');
const url = await getDownloadURL(ref);
return url;
} finally {
setIsUploadingImage(false);
}
}

async function onSubmitCreateService() {
if (!userIdentifier) {
Alert.alert('Non connecté', 'Connecte-toi pour créer un service.');
return;
}
if (!isFormValid) {
Alert.alert('Champs manquants', 'Merci de remplir tous les champs requis.');
return;
}

setIsSavingService(true);
try {
const now = serverTimestamp();
const categoryReference = doc(firestoreDatabase, 'categories', selectedCategory.id);

// Téléversement de l’image si présente
let imageUrl = null;
if (localImageUri) {
imageUrl = await uploadImageAndGetUrl(localImageUri, userIdentifier);
}

// Création DANS la sous-collection workers/{userIdentifier}/services
await addDoc(collection(firestoreDatabase, 'workers', userIdentifier, 'services'), {
name: serviceName.trim(),
price: Number(servicePrice),
hours: Number(serviceHours) || 0,
minutes: Number(serviceMinutes) || 0,
image: imageUrl,
category: categoryReference,
visible: true,
createdAt: now,
updatedAt: now,
});

navigation.goBack();
} catch (error) {
console.log('onSubmitCreateService error', error);
Alert.alert('Erreur', 'Impossible de créer le service.');
} finally {
setIsSavingService(false);
}
}

< /code>
При необходимости это мой пакет.json < /p>
{
"name": "beautify-worker",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"start": "expo start",
"android": "expo start --android",
"ios": "expo start --ios",
"web": "expo start --web"
},
"dependencies": {
"@react-native-async-storage/async-storage": "2.1.2",
"@react-native-community/datetimepicker": "8.4.1",
"@react-navigation/bottom-tabs": "^7.4.6",
"@react-navigation/native": "^7.1.17",
"@react-navigation/native-stack": "^7.3.25",
"expo": "53.0.20",
"expo-auth-session": "~6.2.1",
"expo-file-system": "~18.1.11",
"expo-image-manipulator": "~13.1.7",
"expo-image-picker": "~16.1.4",
"expo-secure-store": "~14.2.3",
"expo-status-bar": "~2.2.3",
"expo-web-browser": "~14.2.0",
"firebase": "^12.1.0",
"react": "19.0.0",
"react-dom": "19.0.0",
"react-native": "0.79.5",
"react-native-dotenv": "^3.4.11",
"react-native-gesture-handler": "~2.24.0",
"react-native-google-places-autocomplete": "^2.5.7",
"react-native-reanimated": "~3.17.4",
"react-native-safe-area-context": "5.4.0",
"react-native-screens": "~4.11.1",
"react-native-url-polyfill": "^2.0.0",
"react-native-web": "^0.20.0"
},
"devDependencies": {
"@babel/core": "^7.20.0",
"@types/react": "~19.0.10",
"typescript": "~5.8.3"
},
"private": true
}



Подробнее здесь: https://stackoverflow.com/questions/797 ... are-not-su
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»