Сохраненные изображения в галерее отображаются только при перезагрузке телефона - React-Native Android
Я использую API-интерфейс файловой системы из библиотеки act -native-fetch-blob.
Я запрашиваю изображение с сервера, получаю base64, а затем сохраняю его в папке Pictures в Android-fs.
Я сохраняю изображение так:
var RNFetchBlob = require('react-native-fetch-blob').default;
const PictureDir = RNFetchBlob.fs.dirs.PictureDir;
getImageAttachment: function(uri_attachment, filename_attachment, mimetype_attachment) {
return new Promise((RESOLVE, REJECT) => {
// Fetch attachment
RNFetchBlob.fetch('GET', config.apiRoot+'/app/'+uri_attachment)
.then((response) => {
let base64Str = response.data;
let imageLocation = PictureDir+'/'+filename_attachment;
//Save image
fs.writeFile(imageLocation, base64Str, 'base64');
console.log("FILE CREATED!!")
}).catch((error) => {
// error handling
console.log("Error:", error)
});
},
проблема
Изображение успешно сохраняется, но когда я открываю галерею Android, оно не видно. Но когда я выключаю и включаю эмулятор Android, он появляется в Галерее.
Вопрос
Как я могу просмотреть изображение в Галерее Android без перезагрузки эмулятора?
Решение
Я добавил это к описанному выше методу после создания файла:
RNFetchBlob.fs.scanFile([ { path : imageLocation, mime : mimetype_attachment } ])
.then(() => {
console.log("scan file success")
})
.catch((err) => {
console.log("scan file error")
})
Спасибо тебе @Xeijp.
2 ответа
В Android, чтобы сделать изображение видимым в галерее, вы должны использовать "медиа-сканер" для этого файла. response-native-fetch-blob действительно предоставляет API для этого
fs.scanFile(path_of_the_file)
Галерея получает контент из медиа-базы данных. медиа-сканер анализирует файловую систему и соответственно обновляет медиа-базу данных. Может потребоваться некоторое время, пока посредник не найдет ваше новое изображение.
- Вы можете попросить медиа-сканер проанализировать каталог, в котором вы только что сохранили изображение, как описано в том, как запустить медиа-сканер в Android
- или вы можете добавить изображение в mediadb самостоятельно, как описано в /questions/31839926/trigger-mediascanner-dlya-staryih-i-novyih-ustrojstv-android-nizhe-i-vyishe-kitkat/31839935#31839935