RN Image 不能显示 https 图片处理

RN Image 不能显示https 图片,但是 http的能够正常处理。

方法: 1. 把https 直接改成 http (可能不行,可能可以,我碰到的不行)

方法: 2. 把https 转成base64 后显示 (以下代码就是)

import React, {Component}from 'react';
import {Image, TouchableOpacity, StyleSheet,Platform} from 'react-native';
import {Actions}  from 'react-native-router-flux';
import RNFetchBlob from 'react-native-fetch-blob';

export default class GridItem extends Component {

    state = {
        base64Data: ''
    }

    componentDidMount() {
        const { item: { uri } } = this.props;
        if (!uri || uri.indexOf('https') === -1) {
            return;
        }

        RNFetchBlob.config(Platform.OS === 'android' ? {
                trusty: true,
                fileCache: true
            } : {fileCache: true})
            .fetch('GET', uri)
            .then((resp) => {
                return resp.readFile('base64')
            })
            .then(base64Data=> {
                this.setState({
                    base64Data: 'data:image/png;base64,' + base64Data
                })
            })
    }

    _selectPhoto = () => {

        const {item, selectPhoto} = this.props
        selectPhoto(item)
    }

    _deletePhoto = () => {

        const {item, deletePhoto} = this.props
        deletePhoto(item)
    }

    _ManagePhotos = ()=> {
        const {item, deletePhoto} = this.props
        console.log(item)
        Actions.ManagePhotos({item: item, deletePhoto: deletePhoto});
    }

    render() {
        let props;
        let { item } = this.props
        let isAddPhoto = item.uri.indexOf('photo_add') !== -1;
        if (isAddPhoto || item.uri.indexOf('https') === -1) {
            props = this.props;
        } else {
            props = Object.assign({}, this.props, {item: {uri: this.state.base64Data}});
        }
        return <TouchableOpacity onPress={isAddPhoto?this._selectPhoto:this._ManagePhotos}>
            {isAddPhoto ?
                <Image source={require('./img/photo_add.png')} style={styles.photo}/> :
                <Image source={{uri: props.item.uri}} style={styles.photo}/>
            }
        </TouchableOpacity>
    }
}


const styles = StyleSheet.create({
    photo: {
        height: 80,
        width: 80,
        marginRight: 4,
    },
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值