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

Требуется помощь в технологиях


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

Мне просто не понятно почему делается

 image1.Bitmap.LoadFromStream(picture);

а не

 image1.Bitmap.Assign(picture);

?

 

Покажите код передачи фото в иконку маркера.

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

Мне просто не понятно почему делается

 image1.Bitmap.LoadFromStream(picture);

а не

 image1.Bitmap.Assign(picture);

?

 

Покажите код передачи фото в иконку маркера.

Потому что  image1.Bitmap.Assign(picture); выдает ошибку не соответствия типов :[DCC Error] Unit1.pas(54): E2010 Incompatible types: 'TPersistent' and 'TMemoryStream'

Ссылка на комментарий
39 минут назад, AndroidHalfNoob сказал:

Потому что  image1.Bitmap.Assign(picture); выдает ошибку не соответствия типов :[DCC Error] Unit1.pas(54): E2010 Incompatible types: 'TPersistent' and 'TMemoryStream'

Что-то не сходится. Вы же писали код, в котором picture:=TBitmap.Create;

а значит picture не может быть типа TMemoryStream! Поэтому я и спросил какого типа picture.

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

Вот полный текст процедуры

Цитата

var
 mapCenter,Position: TMapCoordinate;
 tapDescr: TMapMarkerDescriptor;
tapMarker:TMapMarker;
x:integer;
risunok:TBitmap;
ms:tmemorystream;
begin


  for Marker in FMarkers do
  begin
    Marker.Remove;
    Marker.Free;
  end;
  FMarkers.Clear;

   MyConnection1.Connected:=true;
MyTable1.Active:=true;
 MyTable1.First;


 for x := 1 to  MyTable1.RecordCount do begin
  begin
  ms:=tmemorystream.Create;
  idhttp1.Get('http://сайт/images/Uchastniki/123.png',ms);
  end;


risunok:=tbitmap.create;
 risunok.LoadFromStream(ms);


 Position:=TMapCoordinate.Create(MyTable1.FieldByName('Koord1').AsFloat,MyTable1.FieldByName('Koord2').AsFloat);
tapDescr := TMapMarkerDescriptor.Create(Position, MyTable1.FieldByName('Nic').AsString);
  tapDescr.Icon:=risunok;
 tapDescr.Visible:=true;
Marker:=UchastnikiMap.AddMarker(tapDescr);
FMarkers.Add(Marker);
 ms.Free;
 risunok.free;
MyTable1.Next;

 

end;

С добавлением разобрался. причем метод assign не работает. выдает ошибку. Работает именно этот вариант tapDescr.Icon:=risunok;

 

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

Пробую отправить фото на сервер

Цитата

procedure TForm1.Button2Click(Sender: TObject);
var ms:tmemorystream;
 picture: TBitmap;
begin

 picture:=TBitmap.Create;
 picture.Assign(Image1.Bitmap);
 ms:=tmemorystream.Create;
 picture.SaveToStream(ms);
 IdHTTP1.Put('http://сайт/images/Uchastniki/'+Edit1.Text+'.jpg',ms);
 ms.Free;picture.Free;

end;

Выдается ошибка HTTP/1.1 405 Not Allowed

Хотя у хостинга для папки Uchastniki разрешения 777 поставил.

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

Пробую отправить фото на сервер


procedure TForm1.Button2Click(Sender: TObject);
var ms:tmemorystream;
 picture: TBitmap;
begin

 picture:=TBitmap.Create;
 picture.Assign(Image1.Bitmap);
 ms:=tmemorystream.Create;
 picture.SaveToStream(ms);
 IdHTTP1.Put('http://сайт/images/Uchastniki/'+Edit1.Text+'.jpg',ms);
 ms.Free;picture.Free;

end;

Выдается ошибка HTTP/1.1 405 Not Allowed

Хотя у хостинга для папки Uchastniki разрешения 777 поставил.

По поводу 405 вики говорит: "405 Method Not Allowed — указанный клиентом метод нельзя применить к текущему ресурсу. В ответе сервер должен указать доступные методы в заголовке Allow, разделив их запятой." Посмотрите что возвращается в заголовке.

По поводу кода... непонятно зачем дополнительно использовать picture: TBitmap; Можно же использовать сразу Image1:

procedure TForm1.Button2Click(Sender: TObject);
var
  ms:tmemorystream;
begin
  ms:=tmemorystream.Create;
  Image1.Bitmap.SaveToStream(ms);
  IdHTTP1.Put('http://сайт/images/Uchastniki/'+Edit1.Text+'.jpg',ms);
  ms.Free;
end;

 

 

 

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

ни ужели ни у кого кода нет? вы же как-то сохраняете картинки? кучу примеров пересмотрел. или не рабочий или версия для отправки файла с жесткого диска компа на ФТП. Там другие переменные применяются. Функция AddFile, но на телефоне это не работает.

Через IDHTTP выдает ошибку 405

а через IDFTP выдает ошибку, что файл или директория отсутствуют

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

procedure TForm1.SendFile;
var
Stream: TIdMultipartFormDataStream;
begin
  Stream := TIdMultipartFormDataStream.Create;
  try
    Stream.AddFile(playerName, uploadFileName, 'multipart/form-data');
    IdHTTP1.HandleRedirects := True;
    Memo1.text:=IdHTTP1.Post( URL, Stream );
  finally
     Stream.Free;
  end;
end;
Изменено пользователем krapotkin
Ссылка на комментарий
4 минуты назад, krapotkin сказал:

если тебе FTP говорит, что директория отсутствует, то может и нет ее?

и директория и файл есть. с правами 777

этот пример я тоже видел. тут мне не понятны параметры 

Цитата

 Stream.AddFile(playerName, uploadFileName, 'multipart/form-data');

 

Изменено пользователем AndroidHalfNoob
Ссылка на комментарий
  • Модераторы
41 минуту назад, AndroidHalfNoob сказал:

ни ужели ни у кого кода нет? вы же как-то сохраняете картинки? кучу примеров пересмотрел. или не рабочий или версия для отправки файла с жесткого диска компа на ФТП. Там другие переменные применяются. Функция AddFile, но на телефоне это не работает.

Через IDHTTP выдает ошибку 405

а через IDFTP выдает ошибку, что файл или директория отсутствуют

у меня код примерно такой же как дал krapotkin, но сохранение делает PHP

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

а вас не смущает параметры функции MultiData.addFile? они все строковые. как мне передать туда поток изображения? мне кажется данная функция сюда не подходит

Изменено пользователем AndroidHalfNoob
Ссылка на комментарий
  • Модераторы
Только что, AndroidHalfNoob сказал:

а вас не смущает параметры функции MultiData.addFile? они все строковые. как мне передать туда потом изображения? мне кажется данная функция сюда не подходит

если у вас картинка в Image нужно сохранить в файл и этот путь указать

Ссылка на комментарий
1 минуту назад, ZuBy сказал:

если у вас картинка в Image нужно сохранить в файл и этот путь указать

Да но получается надо картинку сохранять на устройство во внутренную память телефона а потом от туда уже ее отправлять. Думал сделать легче: сразу из компонента сохранять. А так занимать память на телефоне ну и сразу возникает проблема.... вычисления места где будет сохраняться фото на телефоне.

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

Да но получается надо картинку сохранять на устройство во внутренную память телефона а потом от туда уже ее отправлять. Думал сделать легче: сразу из компонента сохранять. А так занимать память на телефоне ну и сразу возникает проблема.... вычисления места где будет сохраняться фото на телефоне.

нет другого способа, да и проблем нет никаких. сохранил-отправил-удалил

а сохранять можно в Temppath или DocumentsPath

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

Я закачиваю через php скрипт, который лежит на сервере.

код для delphi:

var

 par, path_windows:string;

st:Tidmultipartformdatastream;
RS: TStringStream ;

begin
path_windows:=extractfilepath(paramstr(0));

RS := TStringStream.Create('');

st:=Tidmultipartformdatastream.Create;
 par:= GetMIMETypeFromFile(path_windows+'\'+ 'имя файла') ;
 try
 st.AddFile( 'uploadfile',path_windows+'\'+имя файла' , par  );
 except
     messagedlg('Произошла ошибка. Файл архива не найден. При повторении ошибки, обратитесь к администратору.',mterror,[mbYes],0)  ;
     exit;
 end;
 IdHTTP1.Request.ContentType := st.RequestContentType;
 try
 IdHTTP1.Post( 'http://'+имя сайта+'/директория на сайте/uploadfile3.php', st , RS); // uploadfile3.php - имя скрипта php
 except
    messagedlg('Произошла ошибка. Нет соединения с сервером. Это может быть вследствии его отсутствия или при наличии прокси сервера, неверная настройка программы.',mterror,[mbYes],0)  ;
   exit;
 end;
 if  RS.DataString = 'ok' и обработка

 

Код для php:

<?php

if ( copy($_FILES['uploadfile']['tmp_name'],"uploads2/".basename($_FILES['uploadfile']['name']))) print "ok" ;
else print "no" ;

?>

 

Ссылка на комментарий
3 часа назад, Vitaldj сказал:

Я закачиваю через php скрипт, который лежит на сервере.

код для delphi:


var

 par, path_windows:string;

st:Tidmultipartformdatastream;
RS: TStringStream ;

begin
path_windows:=extractfilepath(paramstr(0));

RS := TStringStream.Create('');

st:=Tidmultipartformdatastream.Create;
 par:= GetMIMETypeFromFile(path_windows+'\'+ 'имя файла') ;
 try
 st.AddFile( 'uploadfile',path_windows+'\'+имя файла' , par  );
 except
     messagedlg('Произошла ошибка. Файл архива не найден. При повторении ошибки, обратитесь к администратору.',mterror,[mbYes],0)  ;
     exit;
 end;
 IdHTTP1.Request.ContentType := st.RequestContentType;
 try
 IdHTTP1.Post( 'http://'+имя сайта+'/директория на сайте/uploadfile3.php', st , RS); // uploadfile3.php - имя скрипта php
 except
    messagedlg('Произошла ошибка. Нет соединения с сервером. Это может быть вследствии его отсутствия или при наличии прокси сервера, неверная настройка программы.',mterror,[mbYes],0)  ;
   exit;
 end;
 if  RS.DataString = 'ok' и обработка

 

Код для php:


<?php

if ( copy($_FILES['uploadfile']['tmp_name'],"uploads2/".basename($_FILES['uploadfile']['name']))) print "ok" ;
else print "no" ;

?>

 

я так понял  

extractfilepath(paramstr(0));

это версия для десктопа

на телефоне будет работать? и как разместить скрипт? на сервере создать файл с расширением .php?

Ссылка на комментарий
18 минут назад, AndroidHalfNoob сказал:

я так понял  


extractfilepath(paramstr(0));

это версия для десктопа

на телефоне будет работать? и как разместить скрипт? на сервере создать файл с расширением .php?

На телефоне? Вроде должно. Эта функция покажет путь, откуда вы запустили программу. А директорию документов, допишите ручками. Про php, да, просто создайте такой файл с расширением php. И рядом директорию, куда будите закачивать. У меня закачивает в директорию uploads2

Ссылка на комментарий
6 минут назад, Vitaldj сказал:

На телефоне? Вроде должно. Эта функция покажет путь, откуда вы запустили программу. А директорию документов, допишите ручками. Про php, да, просто создайте такой файл с расширением php. И рядом директорию, куда будите закачивать. У меня закачивает в директорию uploads2

ок. буду пробовать. только вот с путями на телефоне проблема. ни разу не работал с физической памятью телефона. я так понял что путь может быть любой в зависимости от марки телефона

Ссылка на комментарий
12 минуты назад, AndroidHalfNoob сказал:

ок. буду пробовать. только вот с путями на телефоне проблема. ни разу не работал с физической памятью телефона. я так понял что путь может быть любой в зависимости от марки телефона

uses + System.IOUtils;

 

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

На знаю как в андроид (нет андроида), но в iOs доступна только директория documents , которая своя для каждого приложения. Вот пример, как я прописывал путь, для база данных (с картинками будет тоже самое)

Путь = TPath.Combine(TPath.GetDocumentsPath, 'shoplist.s3db');

этот код рабочий и для андроида.

Изменено пользователем Vitaldj
Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...