2017-10-20 72 views
0

我很難節省從Expo(React Native)中挑選的圖像。將從ReactNative/Expo ImagePicker中挑選的圖像保存到Baqend

https://docs.expo.io/versions/latest/sdk/imagepicker.html

看來陣營本地沒有上傳所選圖像作爲BLOB支持,但確實有一個base64選項。

代碼:

_pickImage = async() => { 
    let pickerResult = await ImagePicker.launchImageLibraryAsync({ 
     allowsEditing: true, 
     base64: true, 
     aspect: [4, 4], 
    }); 
    this._handleImagePicked(pickerResult); 
}; 


_handleImagePicked(pickerResult) { 
    const uri = pickerResult.base64; 
    const img = new db.File({ name: 'test.jpg', data: uri, type: 'base64', mimeType: 'image/jpg' }); 

    db.UserData.load(this.state.UserDataID).then(UserData => { 
     img.upload({ force: true }).then((file) => { 
      UserData.photo = "https://remarkable-apple-95.app.baqend.com/v1" + file.id; 
      alert(file.id) 
      return UserData.update(); 
     }, 
      (error) => { alert(error); } 
     ); 
    }); 
} 

當我console.log(pickerResult.base64)我得到一個超長字符串,它看起來像的base64,但在運行時,該img.upload拋出錯誤,它說"PersistentError: An unexpected persistent error occurred."

回答

1

你」再右吧。 React Native不支持二進制數據。不幸的是Baqend還不支持base64文件上傳。

作爲一種解決辦法,你有兩個選擇:

  1. 使用React Native Fetch Blob庫,它繞過的侷限陣營本地不上傳,並通過本機代碼直接下載文件支持二進制文件,還給參考對那些。您的代碼可能類似於此:

    ImagePicker.showImagePicker(options, async (response) => { 
        const upload = new db.message.UploadFile('files', 'uploadFetchBlob.jpg') 
        const body = 'RNFetchBlob-' + response.uri; 
        RNFetchBlob.fetch('PUT', 'https://{YOUR-APP-NAME}.app.baqend.com/v1' + upload.request.path, upload.request.headers, body).then((res) => { 
         db.File({ parent: 'files', name: 'uploadFetchBlob.jpg'}).url 
        }) 
    }); 
    

遺憾的是隨着世博會的客戶端這不會工作的權利,但你必須退出你的項目和使用「本機代碼」。

  1. 第二種方法是不直接使用baqend文件端點,而是將base64字符串上傳到baqend模塊。在那裏你可以解析你的base64字符串,並將它上傳到你的後端模塊中的文件。你可以在我們的指南中找到這個例子。 https://www.baqend.com/guide/topics/baqend-code/#handling-binary-data

希望這會有幫助