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

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


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

Опубликовано

После различных экспериментов с БД пришел к выводу, что лучше картинки хранить на хостинге в отдельной папке, а не в БД в blob-полях. так как при хранении фото размером 2-3 мегабайта, увеличивается нагрузка на базу и переменная TBitmap не способна вместить в себя такой объем данных. самый рациональный способ хранить в БД имена файлов на фото и в программу уже подгружать эти фото с хостинга.

В связи с этим прошу помощи в объяснении технологии и принципа загрузки и считывания фото. Какие компоненты использовать для подключения к хостингу

Опубликовано
32 минуты назад, AndroidHalfNoob сказал:

После различных экспериментов с БД пришел к выводу, что лучше картинки хранить на хостинге в отдельной папке, а не в БД в blob-полях. так как при хранении фото размером 2-3 мегабайта, увеличивается нагрузка на базу и переменная TBitmap не способна вместить в себя такой объем данных. самый рациональный способ хранить в БД имена файлов на фото и в программу уже подгружать эти фото с хостинга.

В связи с этим прошу помощи в объяснении технологии и принципа загрузки и считывания фото. Какие компоненты использовать для подключения к хостингу

Фото, это обычные файлы, тем более путь у тебя есть. Что тебе мешает просто закачивать файлы  через IdHTTP. Я конечно груду файлов не закачивал и за скорость не ручаюсь, но вробе работает.

Закачиваю так:

var
tstr : TStringList;
lStream1 : TMemoryStream;
begin


  tstr :=  TStringList.Create;
// tstr  'название вашего файла'
// тут можно цикл организовать
lStream1 := TMemoryStream.Create;
form1.IdHTTP1.Get( 'http://тут ваш хост/file_base_update/'+tstr.Strings[1], lStream1);
lStream1.SaveToFile(ExtractFilePath(ParamStr(0)) + tstr.Strings[1] );
           

 

 

Опубликовано

сейчас надо бы отказываться от indy, а то программа и так пухлая, есть нативный HTTPClient

а в остальном - делаем кэш по-любому на устройстве, создаем потоки, в которых происходит закачка либо из кэша либо через HTTP

когда поток заканчивается, результат работы он передает на отображение

по поводу отображения тут была статья про listView и 1000 картинок. К сожалению, поиск на форуме очень странный и я чаще всего не могу найти нужную ссылку

 

  • Модераторы
Опубликовано
10 минут назад, Vitaldj сказал:

Фото, это обычные файлы, тем более путь у тебя есть. Что тебе мешает просто закачивать файлы  через IdHTTP. Я конечно груду файлов не закачивал и за скорость не ручаюсь, но вробе работает.

Закачиваю так:


var
tstr : TStringList;
lStream1 : TMemoryStream;
begin


  tstr :=  TStringList.Create;
// tstr  'название вашего файла'
// тут можно цикл организовать
lStream1 := TMemoryStream.Create;
form1.IdHTTP1.Get( 'http://тут ваш хост/file_base_update/'+tstr.Strings[1], lStream1);
lStream1.SaveToFile(ExtractFilePath(ParamStr(0)) + tstr.Strings[1] );
           

 

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

Поэтому пользуемся хелперами для загрузки файлов, на форуме не раз обсуждалось

Опубликовано
10 минут назад, Vitaldj сказал:

Фото, это обычные файлы, тем более путь у тебя есть. Что тебе мешает просто закачивать файлы  через IdHTTP. Я конечно груду файлов не закачивал и за скорость не ручаюсь, но вробе работает.

Закачиваю так:


var
tstr : TStringList;
lStream1 : TMemoryStream;
begin


  tstr :=  TStringList.Create;
// tstr  'название вашего файла'
// тут можно цикл организовать
lStream1 := TMemoryStream.Create;
form1.IdHTTP1.Get( 'http://тут ваш хост/file_base_update/'+tstr.Strings[1], lStream1);
lStream1.SaveToFile(ExtractFilePath(ParamStr(0)) + tstr.Strings[1] );
           

 

 

GET это же кажется функция получения файла с сервера

выложил на хостинг файл. сейчас попробую скачать его в Image.

Опубликовано (изменено)
3 минуты назад, krapotkin сказал:

сейчас надо бы отказываться от indy, а то программа и так пухлая, есть нативный HTTPClient

а в остальном - делаем кэш по-любому на устройстве, создаем потоки, в которых происходит закачка либо из кэша либо через HTTP

когда поток заканчивается, результат работы он передает на отображение

по поводу отображения тут была статья про listView и 1000 картинок. К сожалению, поиск на форуме очень странный и я чаще всего не могу найти нужную ссылку

 

Про отказ от indy согласен, но проект написан сто лет назад, закачивает 1-3 файла, все работает как часы, поэтому не заморачиваюсь))). Там более в indy использую прокси и аутентификацию, все работает. Может конечно это есть и в нативном HTTPClient, но неохота разбираться и переписывать гору кода.

Изменено пользователем Vitaldj
Опубликовано (изменено)
Цитата

procedure TForm1.Button1Click(Sender: TObject);
var ms:tmemorystream;
begin
ms:=tmemorystream.Create;
idFTP1.Connect;
idFTP1.Get('http://global.ru/www/global.ru/images/product_images/original_images/10_0.png',ms,true);
idFTP1.Disconnect;

image1.Bitmap.LoadFromStream(ms);
ms.Free;

end;

Название сайта global.ru заменено. но путь до картинки именно такой.

При запуске приложения и нажатии на кнопку выдается сообщение No such file or directory

в настройках компонента прописал хост, порт 21, имя пользователя и пароль ftp аккаунта. подключение проходит, но картинка почему то не грузится. Если запускаю программу на компе и указываю загрузку картинки с локального диска, то все работает.
как узнать правильный путь до картинке на сервере? в менеджере ftp путь указывается как ~www/global.ru/images/product_images/original_images/

Изменено пользователем AndroidHalfNoob
Опубликовано
6 минут назад, Vitaldj сказал:

Что я не понял, а вначале с чего запускаете? И почему выбрали ftp , а не http ?

запускаю на телефоне. через http выдает ошибку 

HTTP/1.1 301 Moved

Permanently

Опубликовано
3 минуты назад, AndroidHalfNoob сказал:

запускаю на телефоне. через http выдает ошибку 

HTTP/1.1 301 Moved

Permanently

Ну что то мне подсказывает, что вы путь не правильно указываете. Если в простой браузер копируете этот путь, картинка открывается? 

Опубликовано

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

 

Опубликовано
5 минут назад, AndroidHalfNoob сказал:

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

 

Ну так и попробуйте этот ПРАВИЛЬНЫЙ путь в http вставить;))

Опубликовано
2 минуты назад, Vitaldj сказал:

Ну так и попробуйте этот ПРАВИЛЬНЫЙ путь в http вставить;))

Уже......:)

все работает.

в связи с этим вопрос: как лучше... через http или ftp подключаться?

Опубликовано (изменено)
procedure TForm1.Button1Click(Sender: TObject);
var ms:tmemorystream;
begin
ms:=tmemorystream.Create;
idFTP1.Connect;
idFTP1.Get('http://global.ru/www/global.ru/images/product_images/original_images/10_0.png',ms,true);
idFTP1.Disconnect;

image1.Bitmap.LoadFromStream(ms);
ms.Free;

end;

Почему путь указан http://... а не ftp://... ? Раз обращение через IdFTP, то ftp и прописывайте

 

Изменено пользователем Rusland
Опубликовано

надо уточнить, что имелось в виду

понятно, что синхронизацию нельзя нарушать, а bitmap можно Assign'ить уже в основном потоке 

Опубликовано

речь идет о том, что нельзя в битмап лезть в доп потоке
ну так и не лезть

поток завершается и вызывает событие OnTerminate
обработчик этого события работает в основном потоке
там можно и присвоить все что нужно

Опубликовано
Цитата

ms:=tmemorystream.Create;
IdHTTP1.Get('http://сайт/images/Uchastniki/Marker2.jpg',ms);

picture:=TBitmap.Create;
picture.LoadFromStream(ms);


 image1.Bitmap.LoadFromStream(picture);
ms.Free;
picture.Free

но когда пытаюсь передать picture в маркер, то он выдает сообщение что нет хозяина. хотя при таком коде в Image картинка грузится из TBitmap

Опубликовано

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

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

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