Как отправлять большие файлы с сервера RadPHP на сервер привязки данных Delphi XE

Как лучше всего отправить большой (‹50 МБ) файл с сервера PHP (написанного на RADPHP) на сервер Delphi Datasnap (Delphi XE). Из-за проблем с подключением я бы предпочел использовать HTTP (S), но для меня это новая территория.

Сервер PHP принимает загрузку файла из браузера пользователя ОК и может его кодировать (base_64). Но а) это помещает его в строку, которая не может быть лучшим способом ее обработки б) сервер DataSnap аварийно завершает работу с «Превышена максимальная длина строки» при получении строки

Сервер Datasnap состоит из 4 компонентов - TDSServer, TDSServerClass, TDSHTTPService и TDSAuthenticationManager. Сервер RADPHP использует компонент DSRestConnection.


person user1235807    schedule 27.02.2012    source источник
comment
Я подозреваю, что вы хотите использовать DataSnap для обработки URL-адресов и записи реальных файлов на диск, а затем обрабатывать этот гигантский файл статически, а не через строку в datasnap.   -  person Warren P    schedule 27.02.2012


Ответы (1)


Я не очень хорошо знаком с Datasnap, но не могли бы вы сделать что-то вроде:

  • Клиент загружает файл на сервер RadPHP
  • теперь вы хотите отправить это на сервер Datasnap, что вы можете сделать, это отправить команду со ссылкой для ее загрузки, например:

RadPHP: привет, новый файл для вас, вот ссылка: "http://www.mydomain.com/files/filename.extension"

Datasnap: отправляет ответ, то есть «ОК», и начинает загрузку, например, на стороне сервера вы можете использовать TIdHTTP.

и реализация может быть примерно такой:

procedure DatasnapServerClass.NewFile(const ALink: string);
var
  LIDHTTP: TIdHTTP;
begin
// create instance of TIdHTTP, and call the link to 
// download the file to your desired local folder
// using ALink as the URL
end;
person Community    schedule 27.02.2012
comment
Спасибо, что это возможно, но я пытался добиться этого за один шаг и без открытия каталогов для удаленного доступа на запись (сервер Datasnap захочет удалить после загрузки). - person user1235807; 01.03.2012
comment
лично я не думаю, что это возможно, но опять же, я вообще не использую привязку к данным, поэтому я не очень хорошо знаком с тем, что возможно, а что нет, при этом я уверен, что это работает. - person ; 01.03.2012
comment
TDSHTTPService был моим фокусом до сих пор, чтобы посмотреть, смогу ли я найти, где установить максимальную длину строки, поскольку небольшие файлы работают нормально. Помощь немного скудная! Спасибо за ваш быстрый ответ. - person user1235807; 01.03.2012
comment
вы собираетесь отправлять данные в кодировке base64, это увеличит использование полосы пропускания, я надеюсь, вы пересмотрите возможность использования прямой двоичной передачи для события ... - person ; 01.03.2012
comment
Модуль serverfunctionexecutor имел «ограничения» для POSTing - отправил исходное исправление в Embarcadero, надеюсь, они обновят этот модуль, чтобы он стал полностью функциональным. Размер файла также был переосмыслен - поскольку пользователи будут загружать файлы из дома / небольшого офиса, в любом случае установите ограничение в 10 МБ. - person user1235807; 15.03.2012