Отправка изображений с устройства Android на API - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь отправить изображение с устройства Android на API laravel, используя реагировать родной, но он не читает URL-адрес изображения, т.е. Unable to init from given url (file:///storage/emulated/0/DCIM/Camera/IMG_20181013_133327.jpg, он всегда приносит эту ошибку, это непрочитайте URL-адрес изображения, file:///storage/emulated/0/DCIM/Camera/IMG_20181013_133327.jpg пожалуйста, как я могу успешно отправить изображение на мой API Laravel или я могу загрузить в зависимости от местоположения изображения на устройстве Android

РЕАГИРОВАТЬ НАТУРАЛЬНЫЕ ОСИ

 //THE IMAGES ARE FIRST SELECTED AND THE IMAGES ARRAY IS SET WITH THE URI OF  THE IMAGES
  imageUpload(){
    ImagePicker.openPicker({
        multiple: true,
        cropping: true,
        mediaType: 'photo'
      }) .then(images => {
        console.log(images);  
        const imagesArray = [];
        if(images){
        images.map(i => {  
               imagesArray.push({uri: i.path, type: i.mime, name: i.path});
         } );
         }
        this.setState({
            images_array: imagesArray
        });
        console.log(imagesArray);
        console.log(this.state.images_array);
     }).catch(e => console.log(e));
} 
//THE IMAGES ALONG WITH OTHER DETAILS ARE SENT TO THE LARAVEL API
seller(){
    this.setState({loader: true});
    var data = {
    name: this.state.name,
  //  user_id: this.state.user_id,
    user_id: 18,
    description: this.state.description,
    amount: this.state.amountT,
    qty: this.state.qty,
    cat_id: this.state.cat_id,
    photos: this.state.images_array
    };
     /*   var config = {
    headers: {'Authorization': "Bearer " + this.state.token}
     };*/
    axios.post(
    'http://10.0.2.2:8000/api/sell',
    data,
    //    config
    ).then((response) => {
    this.setState({loader: false});
    console.log(response);   
    Alert.alert(
    'Success',
    'Product posted Successfully',
    [
    {text: 'OK', onPress: this.props.navigation.navigate('Land', {})},
    ],  );    
    }).catch((error) => {
    this.setState({loader: false});
    Alert.alert(
     'Error',
      'Internal Server Error, please try again later',
     [
       {text: 'OK'},
     ],  );    
     console.log(error); 
    });   
    };

LARAVEL BACKEND, т.е. используется API Intervention Image

   public function imagesUpload($goodsId, $photos){
    $images = $photos;
//    $count  = $images->count;
    foreach($images as $image){
    $uri = $image['uri'];
    $filename = basename($uri);
    Image::make($uri)->save(public_path('img/' . $filename));  
    $saver = new Images;
    $saver->product_id = $goodsId;
    $saver->location_url = 'img/'.$filename;
    $saver->save();
    }
    return true;

}

1 Ответ

0 голосов
/ 22 октября 2018

использование double // не работает на реальных устройствах, оно может работать на эмуляторе, но не на реальных устройствах.

попробуйте использовать это

uri:'file:///storage/emulated/0/DCIM/IMG_20161201_125218.jpg'

, убедитесь, что используете/// три слеша.

...