2016-06-21 6 views
0

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

Но я заметил проблему, когда пользователи пытались загрузить такой большой файл стоимостью 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, загружают большие файлы или, возможно, кучу файлов среднего размера, которые требуют времени, чтобы закончить ,

ответ

1

Один из способов создания фрагмента файлов - использование функции 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 App сохранить счетчик которого кусок был загружен последним и объединить все куски в конце.

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

+0

Спасибо! Тогда плохо просто присоединитесь к ним на стороне клиента? например, добавить или что-то –

+0

Да, это должно сработать. –

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^