Я пытаюсь понять, как загрузить файл .gz в React Native с помощью expo и распаковать его, чтобы я мог прочитать файл внутри.
Это файл, который я хочу скачать "http://files.tmdb.org/p/exports/movie_i ... 24.json.gz"
Может ли кто-нибудь посоветовать, какое решение является лучшим решением этой проблемы? ?
Я пытался поискать в Интернете, ничего не нашел, второй пилот и все решения не работали.
Сжатый файл составляет около 20 МБ, а в распакованном виде около 100 МБ. Когда я использовал любое из решений для второго пилота, приложение чаще всего просто вылетало.
Один пример я показал ниже. Я получаю следующую ошибку:
ОШИБКА Ошибка раздувания чанка: неверная проверка заголовка
ОШИБКА Ошибка загрузки или распаковки: неверная проверка заголовка
export const downloadAndUnpack = async () => { const downloadUri = 'http://files.tmdb.org/p/exports/movie_i ... 24.json.gz'; // URL of the .gz file
const unpackedPath = ${FileSystem.documentDirectory}example.txt;
try {
console.log('Fetching the .gz file...');
const response = await fetch(downloadUri);
if (!response.ok) {
throw new Error(`Failed to fetch file: ${response.statusText}`);
}
console.log('Blob fetched. Converting to ArrayBuffer...');
const blob = await response.blob();
// Convert Blob to ArrayBuffer using FileReader
const arrayBuffer = await new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => {
console.log('FileReader onload');
resolve(reader.result as ArrayBuffer);
};
reader.onerror = () => {
console.log('FileReader onerror');
reject(reader.error);
};
reader.readAsArrayBuffer(blob);
});
const gzContent = new Uint8Array(arrayBuffer);
console.log('ArrayBuffer converted to Uint8Array');
// Process the data in smaller chunks
const chunkSize = 1024 * 1024; // 1MB chunks
let offset = 0;
let decompressedData = '';
console.log('Starting decompression...');
while (offset < gzContent.length) {
const chunk = gzContent.subarray(offset, Math.min(offset + chunkSize, gzContent.length));
try {
decompressedData += pako.inflate(chunk, { to: 'string' });
console.log(`Processed chunk from ${offset} to ${Math.min(offset + chunkSize, gzContent.length)}`);
} catch (inflateError) {
console.error('Error inflating chunk:', inflateError);
throw inflateError;
}
offset += chunkSize;
}
console.log('Decompression complete. Saving data...');
await FileSystem.writeAsStringAsync(unpackedPath, decompressedData);
console.log('Unpacked file saved to:', unpackedPath);
} catch (error) {
console.error('Error downloading or unpacking:', error);
}
};
Подробнее здесь: https://stackoverflow.com/questions/793 ... nd-type-sc
Как загрузить и распаковать файл .gz в React Native, используя expo и введите скрипт ⇐ Android
Форум для тех, кто программирует под Android
1735029209
Anonymous
Я пытаюсь понять, как загрузить файл .gz в React Native с помощью expo и распаковать его, чтобы я мог прочитать файл внутри.
Это файл, который я хочу скачать "http://files.tmdb.org/p/exports/movie_ids_12_23_2024.json.gz"
Может ли кто-нибудь посоветовать, какое решение является лучшим решением этой проблемы? ?
Я пытался поискать в Интернете, ничего не нашел, второй пилот и все решения не работали.
Сжатый файл составляет около 20 МБ, а в распакованном виде около 100 МБ. Когда я использовал любое из решений для второго пилота, приложение чаще всего просто вылетало.
Один пример я показал ниже. Я получаю следующую ошибку:
ОШИБКА Ошибка раздувания чанка: неверная проверка заголовка
ОШИБКА Ошибка загрузки или распаковки: неверная проверка заголовка
export const downloadAndUnpack = async () => { const downloadUri = 'http://files.tmdb.org/p/exports/movie_ids_12_23_2024.json.gz'; // URL of the .gz file
const unpackedPath = ${FileSystem.documentDirectory}example.txt;
try {
console.log('Fetching the .gz file...');
const response = await fetch(downloadUri);
if (!response.ok) {
throw new Error(`Failed to fetch file: ${response.statusText}`);
}
console.log('Blob fetched. Converting to ArrayBuffer...');
const blob = await response.blob();
// Convert Blob to ArrayBuffer using FileReader
const arrayBuffer = await new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => {
console.log('FileReader onload');
resolve(reader.result as ArrayBuffer);
};
reader.onerror = () => {
console.log('FileReader onerror');
reject(reader.error);
};
reader.readAsArrayBuffer(blob);
});
const gzContent = new Uint8Array(arrayBuffer);
console.log('ArrayBuffer converted to Uint8Array');
// Process the data in smaller chunks
const chunkSize = 1024 * 1024; // 1MB chunks
let offset = 0;
let decompressedData = '';
console.log('Starting decompression...');
while (offset < gzContent.length) {
const chunk = gzContent.subarray(offset, Math.min(offset + chunkSize, gzContent.length));
try {
decompressedData += pako.inflate(chunk, { to: 'string' });
console.log(`Processed chunk from ${offset} to ${Math.min(offset + chunkSize, gzContent.length)}`);
} catch (inflateError) {
console.error('Error inflating chunk:', inflateError);
throw inflateError;
}
offset += chunkSize;
}
console.log('Decompression complete. Saving data...');
await FileSystem.writeAsStringAsync(unpackedPath, decompressedData);
console.log('Unpacked file saved to:', unpackedPath);
} catch (error) {
console.error('Error downloading or unpacking:', error);
}
};
Подробнее здесь: [url]https://stackoverflow.com/questions/79305129/how-to-download-and-decompress-a-gz-file-in-react-native-using-expo-and-type-sc[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия