Перейти к содержанию
Fire Monkey от А до Я
  • 0

Через NetHTTPClient передать фотографию на сервер


Rusland

Вопрос

Вроде видел где-то пример передачи через NetHTTPClient файла (*.png или *.jpg) на сервер, но не могу вспомнить где.

Помогите с кодом отправки файла.

 

PS. Инди компоненты не интересуют, не хочется их инспользовать

Изменено пользователем Rusland
Ссылка на комментарий

Рекомендуемые сообщения

  • 2

В общем рабочее время подходит к концу - поэтому держи:

Function SampleSendFile(Const Url, FileName: String): Boolean;
var
  lHttp: THTTPClient;
  lSendData: TMultipartFormData;
  lResponse: IHTTPResponse;
Begin
  lHttp := THTTPClient.Create;
  lSendData := TMultipartFormData.Create;
  try
    lSendData.AddFile('FileField', FileName);
    lResponse := lHttp.Post(Url, lSendData);
    Result := lResponse.StatusCode = 200;
  finally
    lSendData.Free;
    lHttp.Free;
  end;
End;

 

Ссылка на комментарий
  • 0
31 минуту назад, Сысоев Максим сказал:

В общем рабочее время подходит к концу 

До 17 работаете? Класс :)

За пример большое спасибо... почти также как в IdHTTP)

Изменено пользователем Rusland
Ссылка на комментарий
  • 0
В 11.07.2016 в 16:52, rareMax сказал:

В общем рабочее время подходит к концу - поэтому держи:


Function SampleSendFile(Const Url, FileName: String): Boolean;
var
  lHttp: THTTPClient;
  lSendData: TMultipartFormData;
  lResponse: IHTTPResponse;
Begin
  lHttp := THTTPClient.Create;
  lSendData := TMultipartFormData.Create;
  try
    lSendData.AddFile('FileField', FileName);
    lResponse := lHttp.Post(Url, lSendData);
    Result := lResponse.StatusCode = 200;
  finally
    lSendData.Free;
    lHttp.Free;
  end;
End;

 

Большое спасибо за пример!

Подскажите, пожалуйста, что делаю не так (я уже 2 дня на загрузку убил, возможно очевидных ошибок не вижу:blink:): не работает код у меня. Серверный скрипт отказывается с ним работать. Выдает ошибку.

Скрипт на стороне сервера (незамысловатый): :unsure:

<?php
$uploaddir = '';
if (move_uploaded_file($_FILES['FileField']['tmp_name'], $uploaddir . $_FILES['FileField']['name'])) {
    print "File is valid, and was successfully uploaded.";
} else {
    print "There some errors!";
}
?>

Через html-форму все отлично грузит (скрипт на сервере рабочий).

Или, пожалуйста, поделитесь скриптиком на php, который дружит с этой функцией. :(

 

 

Ссылка на комментарий
  • 0

Сам на свой вопрос и отвечу: при использовании TMultipartFormData, в параметре URL важно точное указание протокола (https или http).

До этого в POST-запросах использовал TStringList. Там значения не имело (работал редирект и запрос отрабатывал)

Ссылка на комментарий
  • 0
В 11 июля 2016 г. в 16:39, Rusland сказал:

Инди компоненты не интересуют, не хочется их инспользовать

А можно узнать почему? Ведь из (с ходу. В 10.2) 3 рабочих tcp серверов работает только idy. В клиентах ситуация не многим лучше. UDP боллемешно обычный работает, но... Короче очень грустно всё остальное.
 

Ссылка на комментарий
  • 0
23 часа назад, Rusland сказал:

Из-за проблем с SSL... в маркет не пропускают

Не совсем верно. При использовании Indy нужно к проекту подключать библиотеки (libcrypto.so, libssl.so) для Android и  (libcrypto.a, libssl.a)iOS. Пример для A есть на форуме. Для iOS такие же телодвижения, библиотеки например здесь

После всего это приложения прекрасно проходят проверки маркетов. Но все это добавляют лишнее телодвижения, размер приложения раздувается. И я бы рекомендовал использовать нативные компоненты, где это возможно. 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...