CameraRoll 拿到的照片路徑



  • 各位大神 我使用原生的CameraRoll 去抓取相簿的所有相片,用來選擇上傳

    但是到上傳的步驟卻發現錯誤,檢查了一下發現image的路徑都是content://media/external/images/media/ 似乎找不到路徑而上傳失敗

    有方法可以轉成絕對路徑嗎

    下面是 我從相簿抓所有圖片的路徑 並存到ListView的datasource

    let assetType = 'Photos'

        var fetchParams = {
            first: 1000,
            assetType: assetType,
        }
    
        CameraRoll.getPhotos(fetchParams)
            .then((data) => {
                console.info("[PickerImageView] CameraRoll.getPhotos")
                console.log("照片總數: " + data.edges.length)
                console.log(data.edges)
    
                data.edges.map(function(item){
                    // console.log(item.node.image.uri)
                    assetLibraryArr.push({
                        source: item.node.image.uri,
                        isWillDelete: false,
                        description: '',
    
                    })
                })
    
                this.setState({
                    assetLibraryArr: assetLibraryArr,
                    dataSource: this.state.dataSource.cloneWithRows(assetLibraryArr)
                })
            }, (e) => {
                console.log(source)
            });


  • 请问你们上传是用的blob对象么?这个怎么构造出来?


  • administrators

    直接在formdata中附上路径,RN自己会取对应的二进制数据
    https://github.com/facebook/react-native/blob/master/Examples/UIExplorer/js/XHRExampleFormData.js#L140



  • @YouHan26 沒錯 是用blob

    我直接用RN原生的CameraRoll去拿相簿的每個照片 再把他加到ListView的DataSource



  • @sunnylqm 您好 我是想要再拿取照片前就把所有相片加到formdata中 再取出來加到ListView

    加完之後發現路徑還是content:// 不曉得是否我程式碼有打錯

    CameraRoll.getPhotos(fetchParams)
    .then((data) => {
    // console.info("[PickerImageView] CameraRoll.getPhotos")
    // console.log("照片總數: " + data.edges.length)
    // console.log(data.edges)

                data.edges.map(function(item){
    
                    var imagedata = new FormData();
                    imagedata.append(item.node.image.uri);
                    console.log(imagedata)
    
                    assetLibraryArr.push({
                        source: imagedata,
                        isWillDelete: false,
                        description: '',
                    })
    
                })
    
    
                this.setState({
                    assetLibraryArr: imagedaya,
                    dataSource: this.state.dataSource.cloneWithRows(assetLibraryArr)
                })
    
            }, (e) => {
                console.log(source)
            });
    
    }

  • administrators


登录后回复