Как разделить JSON на стороне сервера, а затем присоединиться и транслировать его на стороне клиента

В настоящее время у меня есть большая ссылка для скачивания файла JSON размером 1 ГБ. Что я могу сделать, это загрузить его с помощью приложения Android, а затем проанализировать содержимое с помощью потоковой передачи JSON через GSON.

Но я заметил проблему, когда пользователи пытаются загрузить такой большой файл стоимостью 1 ГБ.

  1. Что, если интернет пользователя сломался в середине загрузки?
  2. Что делать, если на устройстве пользователя внезапно не хватило места?

Исходя из вышеизложенных сценариев, загрузка должна начаться заново в начале.

Чтобы исправить это, я подумал о возможном решении, которое разбивает JSON на части. Таким образом, приложение может проверить, загружена ли уже часть, и это просто означает, что приложение возобновляет загрузку с последней загруженной части, что экономит данные и время.

Мой вопрос, как я могу разделить большой файл JSON? это просто очень большой файл JSON, ничего особенного. Я использую PHP для генерации JSON-файла из mysql с кодами:

$fp = fopen($target_dir.'/json.json', 'w');
fwrite($fp,json_encode(array('reading'=>$r,'book'=>$b,'article'=>$a,'month'=>$m, 'status'=>$status)));
fclose($fp);

Затем создаем ссылку через:

$file = $target_dir.'/json.json';

if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Expires: 540');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
}

Кроме того, если я смогу разделить файл JSON и создать ссылки для загрузки для приложения, как я могу присоединиться к ним через приложение для Android? Если присоединение не является необходимым, могу ли я разобрать их на куски?

Я не знаю, является ли это лучшим подходом для решения такой проблемы, но я заметил, что 3D-игры для мобильных устройств, такие как настоящие гонки и GTA san andreas, загружают большие файлы или, возможно, кучу файлов среднего размера, которые требуют времени для завершения.

0

Решение

Одним из способов создания фрагментов файлов является использование Fread () PHP функция С помощью Fread мы можем указать количество байтов, которые мы хотим прочитать из файла. Итак, что вы можете сделать, это создать куски файлов после / во время создания файла из базы данных.

Вот как вы можете создавать куски.

$fp = fopen("jsonfile.txt",'r');
$i=1;
while(!feof($fp)) {
$json_contents = fread($fp,4000);
file_put_contents('json_chunk_'.$i.'.txt',$json_contents);
$i++;
}

Теперь в приложении для Android сохраните счетчик того, какой чанк был загружен последним, и объедините все чанки в конце.

Это может решить проблему, если интернет-соединение пользователя было прервано во время загрузки данных.

1

Другие решения

Это зависит от данных.
Если данные похожи на строки в БД с идентификатором, клиент может загружать идентификаторы одну за другой, поэтому вам не понадобится кусок данных, только строка. Когда клиент теряет соединение в одной строке, он повторяет эту строку до тех пор, пока не останется больше данных.

0

По вопросам рекламы [email protected]