React-native-android - Как сохранить изображение в файловой системе Android и просмотреть в «Галерее» телефона

Можно ли сохранить изображение в локальной файловой системе андроида, чтобы его можно было просматривать из «Галереи» телефона и в папке??

Я нашел эту библиотеку react-native-fs, но после изучения документации и работы с примером Я все еще не уверен, возможно ли это.

Спасибо




Ответы (2)


Для тех, у кого такая же проблема, вот решение.

Решение

Я использую API файловой системы из библиотеки react-native-fetch-blob. Это потому, что я думал, что она лучше документирована и понятна, чем библиотека «react-native-fs».

Я запрашиваю изображение с сервера, получаю base64, а затем сохраняю его в каталоге изображений в файловой системе Android.

Я сохраняю изображение следующим образом:

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!!")

     RNFetchBlob.fs.scanFile([ { path : imageLocation, mime : mimetype_attachment } ])
     .then(() => {
       console.log("scan file success")
     })
     .catch((err) => {
       console.log("scan file error")
     })

    }).catch((error) => {
    // error handling
    console.log("Error:", error)
  });
},

Следующий код в приведенном выше методе обновляет галерею, иначе изображения не будут отображаться до тех пор, пока телефон не будет выключен и снова включен.

RNFetchBlob.fs.scanFile([ { path : imageLocation, mime : mimetype_attachment } ])
.then(() => {
  console.log("scan file success")
})
.catch((err) => {
  console.log("scan file error")
})

Наслаждаться!

person Larney    schedule 09.08.2016
comment
Знаете ли вы, почему двоичный файл всегда является текстовым (base64) в React-Native? Я не понимаю. Я не разбираюсь в программировании для мобильных устройств, но сомневаюсь, что Android обрабатывает только текстовые файлы. Javascript также не ограничивается текстовыми файлами. Так почему я не могу сохранять ДВОИЧНЫЕ файлы? - person Mörre; 22.07.2017

Вы можете сделать это с помощью react-native-fs. Существует константа PicturesDirectoryPath, которая не упоминается в README проекта; если вы сохраните туда файл, он должен появиться в приложении «Галерея». Если вы хотите, чтобы он появился в вашем собственном альбоме, просто создайте новый каталог в этой папке и сохраните файл в нем, например

const myAlbumPath = RNFS.PicturesDirectoryPath + '/My Album'

RNFS.mkdir(myAlbumPath)
  .then(/* write/copy/download your image file into myAlbumPath here */)

Извините, у меня больше нет полного примера кода, потому что вместо этого я перестал хранить изображения в личном каталоге кеша моего приложения. Надеюсь, это все равно поможет!

person warby    schedule 22.07.2016
comment
Спасибо. Я пойду и посмотрю, что произойдет. - person Larney; 22.07.2016
comment
Привет. У меня все еще много проблем с react-native-fs. Не могли бы вы взглянуть на этот вопрос, если у вас есть шанс. stackoverflow.com/questions/38662309/ - person Larney; 02.08.2016