РЕДАКТИРОВАТЬ:
, пока предыдущий ответ работал над отладочной версией приложения, кажется, что он работает на производстве, потому что на производстве resource.uri
возвращает file://
uri вместоhttp://
как в отладочной версии.
, чтобы исправить проблему, нам нужно проверить, был ли это file
uri или http
url.затем используйте функцию копирования в act-native-fs вместо функции загрузки, если она была file
uri.
import zipFile from './assets/zip/file.zip'
import * as RNFS from 'react-native-fs'
import { unzip } from 'react-native-zip-archive'
import resolveAssetSource from 'react-native/Libraries/Image/resolveAssetSource'
...
componentDidMount() {
const destination = RNFS.DocumentDirectoryPath + '/'
const filename = 'file.zip'
const resource = resolveAssetSource(zipFile)
const fileUri = resource.uri
this.loadZipFile(fileUri, destination + filename)
.then((result) => unzip(destination + filename, destination))
.then((result) => {
console.log(result)
})
.catch((error) => {
console.log(error)
})
}
}
loadZipFile = (fileUri, destinationFile) = {
if (fileUri.startWith('file://')) {
return RNFS.copyFile(fileUri, destinationFile)
} else {
const downloadOptions = {
fromUrl: fileUri,
toFile: destinationFile
}
return RNFS.downloadFile(downloadOptions).promise
}
}
, это должно работать как в рабочей, так и в отладочной версии, даже отправляяzip-файл с использованием push-кода в нашем случае работал нормально.
СТАРЫЙ ОТВЕТ:
После просмотра исходного кода реагировать-нативный-локальный-ресурс , мы придумали некоторую идею.
Проблема с response-native-local-resource в нашем случае заключается в том, что конечный результат был text
, но zip-файл не является text
.Поэтому мы пытаемся перехватить код посередине, чтобы получить zip-файл, как нам нужно.
После некоторого эксперимента мы следуем реагировать-нативный-локальный-ресурс код, пока не получим uri
файла, затем используйте реагировать-native-fs , чтобы загрузить файл в папку локального хранилища, затем распакуйте этот файл.
Вот пример рабочего кода для нашего случая
import zipFile from './assets/zip/file.zip'
import * as RNFS from 'react-native-fs'
import { unzip } from 'react-native-zip-archive'
import resolveAssetSource from 'react-native/Libraries/Image/resolveAssetSource'
...
componentDidMount() {
const destination = RNFS.DocumentDirectoryPath + '/'
const filename = 'file.zip'
const resource = resolveAssetSource(zipFile)
const fileUri = resource.uri
const downloadOptions = {
fromUrl: fileUri,
toFile: destination + filename
}
RNFS.downloadFile(downloadOptions).promise
.then((result) => unzip(destination + filename, destination))
.then((result) => {
console.log(result)
})
.catch((error) => {
console.log(error)
})
}
Надеюсь, что это может помочь любому, кто столкнулся с той же проблемой