[英]react-native-image-picker uri doesn't persist for android
根據文檔:
在 iOS 上,不要假設返回的絕對 uri 會持續存在。 見#107
我正在我的 android(小米)設備上測試它,當我選擇一個圖像時它工作正常,但是在關閉應用程序並再次打開它或使用react-native run-android
重新運行它后, uri
不起作用不再是圖像,而是藍色。 這是我的代碼:
ImagePicker.showImagePicker({
storageOptions: {
skipBackup: true
}
}, res => {
// handling error, etc.
this.setState({image: res.uri});
// persisting with AsyncStorage
}
);
//then showing it
<Image style={{height: 100, width: 100}} source={{ uri: this.state.image }}/>
這是我重啟應用后的 uri:
content://com.miui.gallery.open/raw/%2Fstorage%2Femulated%2F0%2FDCIM%2FCamera%2FIMG_20190310_123752.jpg
這很奇怪,因為當我得到藍色並再次從我的圖庫中選擇相同的圖片時,我得到與上面相同的 uri 並且它有效!!!盡管它與重新啟動之前相同。 我能做什么? 謝謝
對於 Android,您可以使用response.path
而不是response.uri
來獲取設備上的真實文件路徑。 https://github.com/react-native-community/react-native-image-picker/blob/master/docs/Reference.md
不要忘記在 response.path 前面加上file:///
,所以如果我拿你的代碼:
...
this.setState({image: "file:///" + res.path});
...
response.uri
似乎是臨時路徑,它在應用程序關閉的同時被殺死。
解決這個問題的標准方法是禁用圖像的緩存,但是我總是通過在 url 末尾添加一個額外的參數來解決這個問題,使其與以前不同,所以通過這種方式你將欺騙 os(android在你的情況下)。 代碼改成這樣:
<Image style={{height: 100, width: 100}} source={{uri:'your_image_link.com/image.jpg?ts=Math.random()' }}/>
這將為您的 uri 添加一個獨特的尾部,以防止緩存。 不要忘記您需要將'your_image_link.com/image.jpg?ts=Math.random()'
放在setState() 中。 祝你好運!
當我們使用launchCamera()
方法拍攝圖像時,圖像會保存在臨時位置,以便隨時刪除圖像,您需要將該圖像移動或復制到 Storage 中。 您可以使用react-native-fs包將該映像從臨時位置復制或移動到存儲。 launchCamera()
返回臨時位置 uri,您可以使用該 uri 執行移動或復制功能。
此方法允許您拍攝多張圖像並在拍攝圖像后上傳它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.