Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2015, 18:51   #1
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию Как отправить на сервер не готовый файл, а, например TJPEGImage или TBitmap?

В данный момент я создаю файл и потом отправляю его на сервер. А как сразу отправить TBitmap,TPNGObject или TJPEGImage?
Имею в данный момент такое :
Код:
Код:
png := TPNGObject.Create; // ???????
                            png.Assign( bmp_Nxoda);
                            png.SaveToFile(St_login+'Nxoda.png');
                         bmp_Nxoda.Free;
                         bmp_Nxoda_prom.Free;
                         png.Free;
                           FileName := St_login+'Nxoda.png';
                              formData := TIdMultiPartFormDataStream.Create;
                           formData.AddFile('userfile',fileName,'application/octet-stream');
                            sss:='http://мой сайт.ru/file_nxoda.php';

                            sss:=idhtp2.Post(sss,formData);
php:
Код:
Код:
<?php

	
$param1=$_POST['param1'];
$param2=$_POST['param2'];
echo $param1.':'.$param2;
$file_=$_FILES['userfile']['tmp_name'];
echo '-'.$file_;
$uploaddir = ''; 
if (!is_uploaded_file($_FILES['userfile']['tmp_name'])){
  print "Файл '".$_FILES['userfile']['tmp_name']."' не залился "; die;
}
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name'])) {
    print "File is valid, and was successfully uploaded.";
} else {
    print "Не могу залить файл'".$_FILES['userfile']['tmp_name']."' РІ '".$uploaddir . $_FILES['userfile']['name']."'"; die;
}

Последний раз редактировалось Stilet; 06.07.2015 в 18:56.
Illusiony вне форума Ответить с цитированием
Старый 06.07.2015, 18:58   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Затолкай в стрим. Что-то типа:
Код:
png.SaveToStream(formData);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.07.2015, 23:17   #3
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Затолкай в стрим. Что-то типа:
Код:
png.SaveToStream(formData);
Так а что делать с этим ?
Код:
formData.AddFile('userfile',fileName,'application/octet-stream');
Ведь он ожидает именно файл,а не png := TPNGObject

Если просто перед этим вставить
Код:
png.SaveToStream(formData);
то выдает ошибку с Unsupported operation

Р.S. рисунок конечно до этого загрузил:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  bmp:= Tbitmap.Create;
bmp.LoadFromFile('Donate_2.bmp');
end;
В новой тестовой програмке использовал bmp


Наверно следует использовать AddObject, как именно сейчас ищу инфу, пока что не очень

Последний раз редактировалось Illusiony; 06.07.2015 в 23:32.
Illusiony вне форума Ответить с цитированием
Старый 07.07.2015, 00:52   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

я не поленился, скачал сначала хэлп от инди 10.1.5.0 и почитал про сабж.
затем нашёл нужный модуль в исходниках, залез в него и сделал вывод:
метод AddObject() - то, что надо.

Код:
{$I IdDeprecatedImplBugOff.inc}
function TIdMultiPartFormDataStream.AddObject(const AFieldName,
  AContentType, ACharset: string; AFileData: TObject;
  const AFileName: string = ''): TIdFormDataField;
{$I IdDeprecatedImplBugOn.inc}
begin
  if not (AFileData is TStream) then begin // добавляемый объект должен быть стримом!!!
    raise EIdInvalidObjectType.Create(RSMFDInvalidObjectType);
  end;
  Result := AddFormField(AFieldName, AContentType, ACharset, TStream(AFileData), AFileName);
end;
слава мне!

... бурные и продолжительные апплодисменты...
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 07.07.2015, 19:23   #5
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Действительно,min@y™, слава тебе

Если сделать так то не выдает ошибок :
Код:
 
var
formData: TIdMultiPartFormDataStream;
stream1:TStream;
begin
  FileName := 'Donate_2.bmp';
  formData := TIdMultiPartFormDataStream.Create;
  stream1:=TMemoryStream.Create;
  bmp.SaveToStream(Stream1);
  formData.AddObject('Donate_2.bmp',fileName,Stream1);
Но здесь что то не так :
formData.AddObject('Donate_2.bmp',f ileName,Stream1);

Имя файла уже задано в fileName, тогда 'Donate_2.bmp' не нужно, но без него ошибка.

Вот это, наверное ближе к правде:
Код:
formData.AddObject('picture', 'image/bitmap', Stream1, 'Donate_2.bmp');
 formData.AddObject('picture', 'application/octet-stream', Stream1, 'Donate_2.bmp');

procedure AddObject(const AFieldName: string; const AContentType: string; AFileData: TObject; const AFileName: string = '');
Задается 4 параметра и они обязательные все?
Но как правильно указать не знаю.


Кажись работает так :
Код:
formData.AddObject('userfile', 'application/octet-stream', Stream1, FileName);
)))

Последний раз редактировалось Illusiony; 07.07.2015 в 20:43.
Illusiony вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TBitMap / TJpegImage в потоках Puhovoi Общие вопросы Delphi 8 10.03.2013 16:49
Как отправить файл на сервер через FTP не зная имени, а зная только расширение файла? Самуйлов Э.В. Общие вопросы Delphi 2 03.03.2013 13:15
Отправить файл на сервер Хоттабич C/C++ Сетевое программирование 4 03.03.2012 17:07
[WinAPI] Как отправить файл на сервер? Ёжик в тумане Win Api 4 11.01.2012 01:10
Как установить прозрачность в TImage или TBitMap X@OC Компоненты Delphi 6 23.11.2011 23:18