簡體   English   中英

react-native-image-picker uri 不適用於 android

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM