React-Native: Как открыть локально связанный двоичный файл - PullRequest
0 голосов
/ 23 мая 2018

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

Прежде чем позволить пользователю отправить обновление, мне нужно открыть свой кодzip и выполните некоторую проверку его содержимого.

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

  • require ('./ firmware / fw.zip');<- упаковщик по умолчанию не содержит .zip </li>
  • require ('./ firmware / fw.pdf');Упаковщик <- [gross hack] включает в себя PDF-файлы, но фактическим результатом вызова require () является число: <code>5.Я не знаю, что я могу сделать с этим номером, чтобы получить содержимое файла, но я почти уверен, что эта система require () предназначена для загрузки изображений, а не двоичных данных.
  • ReactNativeFs.openFile ('./firmware/fw.zip ');<- ошибка ENOENT </li>
  • ReactNativeFs.openFile (${ReactNativeFs.MainBundlePath}/firmware/fw.zip);<- MainBundlePath на андроиде <code>undefined.

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

Я почти уверен, что могу вручную поместить zip-файл в соответствующие каталоги ресурсов android и ios, но это похоже наступить по труднопроходимой дороге.

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Я снова столкнулся с этой проблемой пару месяцев спустя (я, видимо, единственный парень, которому нужно упаковать .zips в реагирующий на родину), и приведенный выше ответ не сработал для iOS.Поэтому я закодировал .zips как base64, поместил их в файлы .js, а затем использовал import для получения данных из этих файлов .js.На самом деле это выглядит несколько хакерским, но также и гибким долгосрочным решением, без необходимости возиться с зависимыми от платформы расположениями файлов.

См. Полный ответ на мой новый вопрос: Конфигурация React-native packager -Как включить файл .zip в комплект?

0 голосов
/ 23 мая 2018

Частичное решение:

Измените android / app / build.gradle и добавьте

task copyData(type: Copy) {
    from '../../firmware/fw.zip'
    into 'src/main/assets/raw/firmware'
}
preBuild.dependsOn copyData

Это будет, по крайней мере, гарантировать, что файл будет копироваться каждый раз при сборке, а затемдоступно с ReactNativeFs.readFileAssets('raw/firmware/fw.zip', 'base64').Я не полностью взволнован, потому что мне все еще нужно иметь зависимый от iOS / Android код при загрузке файла, но по крайней мере он загружается сейчас.

Совет: следите за синтаксисом в gradle,into src/main/assets/myFirmware.zip создаст DIRECTORY с именем myFirmware.zip и поместит под ним ваш zip-файл.Тогда readFileAssets все равно не будет работать, потому что он находит каталог по вашему пути, а не файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...