У меня есть несколько относительно больших файлов (1Mb-32Mb), и мне нужно отправить их из настольного приложения в скрипт, написанный на PHP (с помощью PHP-фреймворка под названием CodeIgniter).Поскольку файлы довольно большие, я собираюсь разбить эти файлы на маленькие куски / пакеты, закодировать каждый из них с помощью Base64 и отправить их один за другим через сообщение в формате JSON.
У меня есть идеяо том, как отправить их на сервер, но я хотел бы сначала спросить вас, что вы об этом думаете, если вы думаете, что все в порядке или если оно ошибочно.
Вот оно.Поскольку английский не является моим родным языком, я предпочитаю выставлять его как диалог между двумя субъектами, клиентом и сервером.Хотя я бы немного лучше понял, что я пытаюсь сделать:
Сообщение № 1:
Клиент:"Привет серверМне нужно отправить вам файл длиной -X- Кбайт. Файл, который я вам отправлю, будет иметь контрольную сумму -file_cheksum - "
Сервер: " Хорошо, я готовчтобы получить его. Разделите его на -N- небольшие пакеты, каждый из которых имеет длину -Y- Кбайт, и отправьте их сюда один за другим, я запомню, что с ними делать, если в своем сообщении вы упомянули, что отправляетепакеты для сборки файла с идентификатором -FILE_ID- "
Сообщение № 2:
Клиент: " Вот первый пакет -N-, этот пакет требуется для сборки файла с именем -FILE_ID-, и вот контрольная сумма первого пакета, чтобы вы могли проверить, поступил ли пакет в хорошем состоянии "*
Сервер: «Спасибо, клиент, я только что запомнил его во временной папке. Продолжай.»
...
Сообщение #N + 1:
Клиент:"Вот -N- пакет -N-, это последний пакет, и он необходим для сборки файла с именем -FILE_ID-, а также контрольная сумма последнего пакета, чтобы вы могли проверить,пакет прибыл в хорошем состоянии "
Сервер: " Спасибо клиент, я только что собрал все пакеты и проверил контрольную сумму;Полученный файл в порядке.Хорошая работа. "
Каждое сообщение будет отправлено через HTTP Post и будет отформатировано с помощью JSON, а каждый пакет, содержащий часть файла, будет закодирован в Base64, а затем декодирован сервером. Вот примерсообщение, отправленное клиентом на сервер:
{
"request": "set-packet",
"id": " [ file ID ] ",
"packet":
{
"file": " [ here goes the packet in Base64 ] ",
"checksum": " [ here goes the checksum ] "
}
}
Если все в порядке, сервер ответит:
{
"status": "ok",
"message": "packet memorized"
}
Если возникнет проблема, сервер вместо этого ответит, например,:
{
"status": "error",
"message": "Checksum doesn't match, try again"
}
Что вы думаете об этой логике? Она правильная или ошибочная, и вы бы могли улучшить ее?
Спасибо