React Native + Expo + Android + HTTP Server = Не удалось выполнить сетевой запрос ⇐ Android
React Native + Expo + Android + HTTP Server = Не удалось выполнить сетевой запрос
Я пытаюсь использовать API выборки для загрузки изображения на удаленный сервер. Адрес сервера не использует протокол HTTPS, только HTTP. Я не могу это изменить.
Я прочитал множество тем на SO и GitHub, но не могу понять, кто виноват: React-Native, Expo, fetch API или HTTP-сервер.
Я прочитал, что мне нужно установить cleartextTrafficPermited="true" в androidManifest. Но я использую Expo в своем проекте, поэтому файлов манифеста нет.
Где мне установить разрешение, необходимое для отправки изображений POST на HTTP-сервер для Android и iOS?
Я использую EXPO GO на телефоне Android для разработки: Версия клиента: 2.29.6
package.json:
"зависимости": { "@expo/vector-icons": "^13.0.0", "@expo/webpack-config": "^19.0.0", "экспо": "~49.0.8", "expo-camera": "~13.4.2", "expo-constants": "~14.4.2", "expo-image": "~1.3.2", "expo-image-manipulator": "~11.3.0", "expo-image-picker": "~14.3.2", "expo-linking": "~5.0.2", "экспо-роутер": "2.0.0", "expo-status-bar": "~1.6.0", "реагировать": "18.2.0", "реакция-дом": "18.2.0", "реагировать-родной": "0.72.4", "react-native-animated-spinkit": "^1.5.2", "реагировать-родной-жест-обработчик": "~2.12.0", "react-native-loading-spinner-overlay": "^3.0.1", "react-native-safe-area-context": "4.6.3", "реагировать-родные-экраны": "~3.22.0", "реагировать-native-web": "~0.19.6", "expo-file-system": "~15.4.4" }, "devDependency": { "@babel/core": "^7.20.0", "babel-plugin-module-resolver": "^5.0.0", "красивее": "^3.0.2" }, app.json:
{ "экспо": { "name": "lpr-android", "slug": "lpr-android", "версия": "1.0.0", "схема": "лпр", «ориентация»: «портрет», "icon": "./assets/icon.png", "userInterfaceStyle": "легкий", "всплеск": { "image": "./assets/splash.png", "resizeMode": "содержать", "backgroundColor": "#ffffff" }, "assetBundlePatterns": [ "**/*" ], "ios": { «поддерживает планшет»: правда }, "андроид": { "адаптивныйIcon": { "foregroundImage": "./assets/adaptive-icon.png", "backgroundColor": "#ffffff" } }, "паутина": { "favicon": "./assets/favicon.png" }, "плагины": [ [ «экспо-камера», { "cameraPermission": "Разрешите $(PRODUCT_NAME) доступ к вашей камере." } ], [ "выставка изображений", { "photosPermission": "Разрешите $(PRODUCT_NAME) доступ к вашей галерее изображений." } ], "экспо-маршрутизатор" ] } } Вот как я использую выборку:
const formData = new FormData(); константное изображение = { URI: сжатое изображение.uri, имя: compressedImage.uri.split("/").pop(), введите: «изображение/jpeg», }; // Добавляем изображение в объект FormData с указанным именем поля formData.append("изображение", img); выборка (HTTP_SERVER_URL, { метод: «ПОСТ», заголовки: { Примите: «приложение/json», "Content-Type": "multipart/form-data", }, тело: данные формы, }) .then((ответ) => ответ.json()) .then((данные) => { if (data.error === true) выдать новую ошибку(JSON.stringify(data)); setResponse(JSON.stringify(data.response.body)); }) .catch((ошибка) => { console.log("Ошибка:", error.message); setError(ошибка.сообщение); }); где
compressedImage {"base64": null, "height": 1067, "uri": "file:///data/user/0/host.exp. экспонента/кэш/ImageManipulator/0390fb75-3752-418c-a8c7-5e8837af099e.jpg", "ширина": 800}
Я пытаюсь использовать API выборки для загрузки изображения на удаленный сервер. Адрес сервера не использует протокол HTTPS, только HTTP. Я не могу это изменить.
Я прочитал множество тем на SO и GitHub, но не могу понять, кто виноват: React-Native, Expo, fetch API или HTTP-сервер.
Я прочитал, что мне нужно установить cleartextTrafficPermited="true" в androidManifest. Но я использую Expo в своем проекте, поэтому файлов манифеста нет.
Где мне установить разрешение, необходимое для отправки изображений POST на HTTP-сервер для Android и iOS?
Я использую EXPO GO на телефоне Android для разработки: Версия клиента: 2.29.6
package.json:
"зависимости": { "@expo/vector-icons": "^13.0.0", "@expo/webpack-config": "^19.0.0", "экспо": "~49.0.8", "expo-camera": "~13.4.2", "expo-constants": "~14.4.2", "expo-image": "~1.3.2", "expo-image-manipulator": "~11.3.0", "expo-image-picker": "~14.3.2", "expo-linking": "~5.0.2", "экспо-роутер": "2.0.0", "expo-status-bar": "~1.6.0", "реагировать": "18.2.0", "реакция-дом": "18.2.0", "реагировать-родной": "0.72.4", "react-native-animated-spinkit": "^1.5.2", "реагировать-родной-жест-обработчик": "~2.12.0", "react-native-loading-spinner-overlay": "^3.0.1", "react-native-safe-area-context": "4.6.3", "реагировать-родные-экраны": "~3.22.0", "реагировать-native-web": "~0.19.6", "expo-file-system": "~15.4.4" }, "devDependency": { "@babel/core": "^7.20.0", "babel-plugin-module-resolver": "^5.0.0", "красивее": "^3.0.2" }, app.json:
{ "экспо": { "name": "lpr-android", "slug": "lpr-android", "версия": "1.0.0", "схема": "лпр", «ориентация»: «портрет», "icon": "./assets/icon.png", "userInterfaceStyle": "легкий", "всплеск": { "image": "./assets/splash.png", "resizeMode": "содержать", "backgroundColor": "#ffffff" }, "assetBundlePatterns": [ "**/*" ], "ios": { «поддерживает планшет»: правда }, "андроид": { "адаптивныйIcon": { "foregroundImage": "./assets/adaptive-icon.png", "backgroundColor": "#ffffff" } }, "паутина": { "favicon": "./assets/favicon.png" }, "плагины": [ [ «экспо-камера», { "cameraPermission": "Разрешите $(PRODUCT_NAME) доступ к вашей камере." } ], [ "выставка изображений", { "photosPermission": "Разрешите $(PRODUCT_NAME) доступ к вашей галерее изображений." } ], "экспо-маршрутизатор" ] } } Вот как я использую выборку:
const formData = new FormData(); константное изображение = { URI: сжатое изображение.uri, имя: compressedImage.uri.split("/").pop(), введите: «изображение/jpeg», }; // Добавляем изображение в объект FormData с указанным именем поля formData.append("изображение", img); выборка (HTTP_SERVER_URL, { метод: «ПОСТ», заголовки: { Примите: «приложение/json», "Content-Type": "multipart/form-data", }, тело: данные формы, }) .then((ответ) => ответ.json()) .then((данные) => { if (data.error === true) выдать новую ошибку(JSON.stringify(data)); setResponse(JSON.stringify(data.response.body)); }) .catch((ошибка) => { console.log("Ошибка:", error.message); setError(ошибка.сообщение); }); где
compressedImage {"base64": null, "height": 1067, "uri": "file:///data/user/0/host.exp. экспонента/кэш/ImageManipulator/0390fb75-3752-418c-a8c7-5e8837af099e.jpg", "ширина": 800}
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
React-Native (только для Android) – TypeError: не удалось выполнить сетевой запрос
Anonymous » » в форуме Android - 0 Ответы
- 46 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Не удалось выполнить сетевой запрос React Native Android App на физическом устройстве
Anonymous » » в форуме Android - 0 Ответы
- 22 Просмотры
-
Последнее сообщение Anonymous
-
-
-
React-Native (только для Android) – TypeError: не удалось выполнить сетевой запрос
Anonymous » » в форуме Android - 0 Ответы
- 22 Просмотры
-
Последнее сообщение Anonymous
-
-
-
React-Native (только для Android) – TypeError: не удалось выполнить сетевой запрос
Anonymous » » в форуме Android - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-
-
-
React-Native (только для Android) – TypeError: не удалось выполнить сетевой запрос
Anonymous » » в форуме Android - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-