Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вывод веб странички из BLOB на WebBrowser


Amateur ©   (2007-03-23 08:04:00) 

Как вывести содержимое BLOB-поля (файл MHT) на компонент WebBrowser на форме, подскажите пожалуйста! Вывод RTF файлов на RichEdit я делаю следующим образом:


var Bs:TBlobStream;
begin  Bs:=TBlobStream(Form1.Table1.CreateBlobStream(Form1.Table1.FieldByName('TextFile '),bmRead));
RichEdit1.Lines.LoadFromStream(Bs);
Bs.Free;
end;


Есть ли способ таким же образом вывести веб страничку?
Blob -> WebBrowser

Заранее спасибо!


mif007   (2007-06-07 14:56:00) [1]

Таже проблема, из перечисленных методов ничего не помогает :(
Кто нашел решение - поделитесь plizzzz


pasha che   (2007-04-10 12:12:00) [2]

У меня получилось так (правда, не с delphi, а с asp-скриптом, но сути не меняет):
IE смотрит не на расширение файла, а на HTTP-заголовок.
Надо чтобы Content-Type: message/rfc822.
В IISе это можно сделать в свойствах либо файла, либо папки (Заголовки HTTP).
В общем, скрипт с расширением .asp, выдающий из БД поле, в котором содержится mht данные, отображается как надо :)


timus   (2007-03-27 15:15:00) [3]

Пример c yahoo у меня не работает.

Mht открывает коряво (показывает поля content-type и т.п.) такое впечатление что mime не до конца разбирает. Если тот же файл показывать  через Navigate все работает. В Msdn есть статья где написано как IE определяет тип содержимого, так вот там первый пункт: расширение имени файла. Пробовал добавлять имя файла в url ничего не меняется :(


Amateur   (2007-03-27 13:38:00) [4]

Если кому нужно нашел решение, немного корявое, но работает. Mht файлы прямо из блоб в Webbrowser.

http://groups.yahoo.com/group/delphi-webbrowser/files/

Правда регистрацию нудную надо пройти чтобы скачать...
Файл с примером там - load_mht_from_stream_and_memo.zip


ЮЮ   (2007-03-27 11:40:00) [5]

В приведенном примерчике, как раз, и грузится из Blob-поля.
Осталось только вместо BiolifeTable.FieldByName('Notes') поставить твоё Blob-поле.

З.Ы. Только это касается HTML-кода. Переименуй mht в html и убедись, что IE загрузит его не так, как ты ожидал. Отчего тогда он из Stream-а загрузит правильно?

Може покопать в сторону "X-MimeOLE: Produced By Microsoft MimeOLEV6.00.2900.3028", который участвовал в создании и, наверняка, участвует в "распаковке" mht фвйла?


Amateur   (2007-03-27 10:53:00) [6]

С расширениями примерно понятно, но выше вот примерчик любопытный есть:

(WebBrowser1.DefaultInterface.Document as IPersistStreamInit).Load
(TStreamAdapter.Create(TBlobStream.Create(BiolifeTable.FieldByName('Notes')
as TBlobField, bmRead), soOwned));


Говорят работал...

Не могли бы вы написать пару строк как из TBlobStream грузить в TwebBrowser? Не знаю что из этого выйдет хочу просто поэкспериментировать. Просто у TWebBrowser я не нашел чтото вроде LoadFromStream, как вообще к нему подобраться к загрузке в браузер из потоков, подскажите?


ЮЮ   (2007-03-27 10:35:00) [7]

WebBrowser-у, как и TImage, например, для загрузки файла важно его расширение, анализирую которое он создает те или иные объекты для загрузки информации. Переименуй mht в html, txt или что другое и уже Explorer, сам же создавший этот файл, не сможет его открыть. Поэтому, ИМХО, не зная внутренностей Explorera заставить его загрузить из Stream-а будет невозможно. Или нужно вызывать не универсальный, а специфичный, для multi-part message in MIME format, метод загрузки, если он есть


Amateur   (2007-03-27 10:07:00) [8]

Реализовал все через временные файлы на диске - из Blob поля файлик на жесткий диск -> c:\123.mht, затем WebBrawser.Navigate(''c:\123.mht) Все работает, но всетаки хочу сделать через потоки, разобраться, понять для себя... Мастера, может быть кто-то делал подобное, подскажите пожалуйста...

Задача сводится к следующему - есть переменная Bs: TBlobStream, в ней сидит один файлик *.html или *.mht, надо загрузить его в компонент на форме WebBrowser1. Помогите, замучался уже :/


Плохиш   (2007-03-23 17:05:00) [9]


> Amateur   (23.03.07 14:07) [11]

Просмотр при пролистывании базы в любом случае с такими объёмами будет тормозить. Я бы сделал задержку в пару секунд на показ страницы, если пользователю действительно надо, то он задержится на данной записи. Для полной красоты добавил бы ещё и появление песочных часов при переходе между записями...


Amateur   (2007-03-23 14:07:00) [10]

Это страницы в mht там же в 1-м файле все включая картинки со страницы, поэтому и большие. А скорость - просмотр пользователем, пролистывание базы. Ну попробую еще, надеюсь хватит скорости.


Johnmen   (2007-03-23 13:58:00) [11]


> а если файлы в блобе, скажем, по 200-500кб не будет ощущаться
> постоянная-запись чтение на диск?

Ну это надо смотреть. Я же не знаю частоту чтения-записи, какой винчестер, какой компьютер....
И не совсем понятно, откуда такие большие размеры файлов?


Amateur   (2007-03-23 13:22:00) [12]

Johnmen, а если файлы в блобе, скажем, по 200-500кб не будет ощущаться постоянная-запись чтение на диск? Если действительно не заметна разница, я конечно попробую этот вариант. Спасибо за советы!


Johnmen   (2007-03-23 12:55:00) [13]

Да я уже не помню подробностей, но у меня всё работало на тестовых испытаниях проекта, но было принято решение о загрузке из файла. Это оказалось проще и понятней без видимого проигрыша в скорости...


Amateur   (2007-03-23 12:25:00) [14]

эх чтото ошибку код ваш дает ((
raised exception class EInvalidCast with message 'invalid class typecast'
в чем тут может быть дело? не подскажете?


Amateur   (2007-03-23 12:22:00) [15]

ну сжатые странички, где картинки и прочее в одном файле... стандартный формат, в IE есть сохранение в нем...


Johnmen   (2007-03-23 12:18:00) [16]


>  в MHT-формате

Что за формат?


Amateur   (2007-03-23 12:17:00) [17]

Так если я правильно понял там приведен пример как загрузить HTML код из строковой переменной в WebBrowser. А как разобраться с загрузкой из Blob? У меня база данных с сохраненными веб страницами в MHT-формате, пользователь переходит по записям в гриде а рядом в WebBrowser должно отображается соответствующее BloB поле... Вот это не могу реализовать. Памагите ))


Johnmen   (2007-03-23 12:17:00) [18]

Вот, что в моём факе
(WebBrowser1.DefaultInterface.Document as IPersistStreamInit).Load
(TStreamAdapter.Create(TBlobStream.Create(BiolifeTable.FieldByName('Notes')
as TBlobField, bmRead), soOwned));


Плохиш   (2007-03-23 12:08:00) [19]

http://www.swissdelphicenter.ch/de/showcode.php?id=1096


Amateur   (2007-03-23 12:03:00) [20]

Видел предложения сохранять страничку из блоб в файл, а потом юзать Navigate и открывать с жесткого диска, но считаю это плохим решением. Может кто-нибудь подскажет как используя потоки загрузить из блоба страничку в TWebBrowser?


Наверх

Титульная страница Поиск, карта сайта Написать письмо