Как загрузить и распаковать файл .gz в React Native, используя expo и введите скриптAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как загрузить и распаковать файл .gz в React Native, используя expo и введите скрипт

Сообщение Anonymous »

Я пытаюсь понять, как загрузить файл .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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»