Всем привет.
Я Шериф, старший разработчик RN и консультант по обеспечению качества.
Когда я начал изучать RN и действительно начал понимать, насколько это здорово, я подумал, что это отличная идея начать с приложения для социальных сетей, основанного на загрузке изображений на серверы, как в Instagram.
Тогда это звучало как простая идея. Но я застрял на первом варианте использования — загрузка изображений на сервер. Так что, если вы новичок в RN сегодня, я помогу вам с этим вопросом.
Прежде всего, прежде чем загружать изображения на сервер, мы должны загрузить их в приложение, для этого есть очень популярная библиотека под названием react-native-image-picker.
Чтобы установите его, просто запустив в корне вашего проекта:
-npm install react-native-image-picker
-react-native link react-native-image-picker
использование
import ImagePicker from 'react-native-image-picker'; // More info on all the options is below in the API Reference... just some common use cases shown here const options = { title: 'Select Avatar', customButtons: [{ name: 'fb', title: 'Choose Photo from Facebook' }], storageOptions: { skipBackup: true, path: 'images', }, }; /** * The first arg is the options object for customization (it can also be null or omitted for default options), * The second arg is the callback which sends object: response (more info in the API Reference) */ ImagePicker.showImagePicker(options, (response) => { console.log('Response = ', response); if (response.didCancel) { console.log('User cancelled image picker'); } else if (response.error) { console.log('ImagePicker Error: ', response.error); } else if (response.customButton) { console.log('User tapped custom button: ', response.customButton); } else { const source = { uri: response.uri }; // You can also display the image using data: // const source = { uri: 'data:image/jpeg;base64,' + response.data }; this.setState({ avatarSource: source, }); } });
Преобразование в base64
Самый простой способ отправить изображение на сервер — отправить его в формате base64.
И вот здесь все становится сложнее. В React Native нет специальной библиотеки, которая предоставляет нам простые в использовании файлы с кодировкой base64, поэтому мы собираемся использовать трюк, чтобы заставить ее работать.
Вот состояние, которое мы восстановили с помощью react-native-image-picker.
поэтому, чтобы создать хороший base64, мы просто добавляем "data:image/jpeg;base64",
передкодом, который мы получили в нашем состоянии.
const image= "data:image/jpeg;base64," + this.state.source
наконец, вот простая функция, которая отправляет изображение в кодировке base64, которое мы создали, в API dbaretna.com.
export function sendImages(image) { const url = "http://www.dbaretna.com/api/base64/img"; return fetch(url, { method: "POST", headers: { Accept: "application/json", "Content-Type": "application/json" }, body: JSON.stringify({ img: image }) }).catch(error => { console.warn(error); }); }
Спасибо за уделенное время.
Я надеюсь, что это может помочь, если у вас есть какие-либо вопросы, не стесняйтесь комментировать или связаться со мной по электронной почте:
[email protected]
Linkedin: https://www.linkedin.com/in/ch%C3%A9rif-mezdari/