将图像从Android设备发送到api

时间:2018-10-22 15:10:01

标签: android laravel react-native axios

我正在尝试使用react native将图像从android设备发送到laravel api,但是它不读取图像的url,即Unable to init from given url (file:///storage/emulated/0/DCIM/Camera/IMG_20181013_133327.jpg,它总是会带来该错误,但不会无法读取图片的网址,file:///storage/emulated/0/DCIM/Camera/IMG_20181013_133327.jpg请如何将图片成功发送到laravel api,或者如何根据图片在android设备上的位置进行下载

反应本地AXIOS

 //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

   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 :(得分:0)

使用double //在实际设备上不起作用,它可能在模拟器上运行,但在实际设备上不起作用。

尝试使用此

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

确保使用///三个正斜杠。