powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / показать stream в iframe
21 сообщений из 21, страница 1 из 1
показать stream в iframe
    #37997439
студент22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть класс со свойством Property TextOfLTheoryFile As %Stream.GlobalBinary;

Код: vbnet
1.
2.
3.
4.
5.
6.
Class DATA.BookLessonTheory Extends (%Persistent, %ZEN.DataModel.Adaptor)
{

Property NumbersLTheory As %String;

Property TextOfLTheoryFile As %Stream.GlobalBinary;}




на зен страничке есть тэйблпэйн, при выборе данных в тэблпэйне в контроллер записывается айди класса.
на этой же страничке есть <iframe hidden=true/>, там хочется отобразить поток.

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<dataController modelId="" id="theoryctrl"  modelClass="DATA.BookLessonTheory" />
<tablePane id="theorytable"
 tableName="DATA.BookLessonTheory"
 onselectrow="zenPage.loadRecordTheory(zenThis.getValue());"
 valueColumn="ID">

 <column header="ID" id="theoryID" colName="ID" hidden="true" />
 <column header="Номер" colName="NumbersLTheory" width="60" filterType="text" />

 </tablePane>

<iframe name="frameTextTheory"  id="frameTextTheory" hidden="true"  width="560" height="315"  />



Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Method loadRecordTheory(id) [ Language = javascript ]
{	
	var fileIframe = zenPage.getComponentById('frameTextTheory');
	fileIframe.setProperty("hidden",true);
	
	var controller4 = zenPage.getComponentById('theoryctrl');
	controller4.setProperty("modelId",id);
	
	var textfile=controller4.getDataByName('TextOfLTheoryFile');
	var urlfile="%25CSP.StreamServer.cls?STREAMOID=";

        fileIframe.setProperty("src",urlfile+textfile);
        fileIframe.setProperty("hidden",false);
}



в textfile сидит %Oid.
так вот имея на руках %Oid как засунуть поток в iframe, в виде страницы или файла?
в таком варианте fileIframe.setProperty("src",urlfile+textfile) поток только скачивает на машину %CSP.StreamServer.cls, а хочется чтобы красиво отображался в iframe
...
Рейтинг: 0 / 0
показать stream в iframe
    #37997475
студент22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
показать stream в iframe
    #37997928
студент22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в Property TextOfLTheoryFile As %Stream.GlobalBinary лежит .doc документ, можно .mht.
может есть другие варианты отображения на zen?
...
Рейтинг: 0 / 0
показать stream в iframe
    #37998417
студент22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The only downside to this solution is that if streams are being retrieved from the database, two queries are required: one to determine the type of data being sent and a second to send the actual data. The overhead in this case is almost exclusively the network overhead, as the data volume is trivial. Therefore, the best practice for rendering data streams retrieved from the database is as follows:
1 Define the template display page with both an <iframe> and an <image>. Both components are initially hidden (hidden='true').
2 Query to find out what type of data is to be rendered.
3 Based on this query, set the src attribute of either the <iframe> or the <image> to the URI of the data stream and set the corresponding component to be visible (hidden='false')
4 When the page is closing, reset the displayed component to be hidden (hidden='true') so that the page is ready for the next data stream.

мне бы пример этого решения...
...
Рейтинг: 0 / 0
показать stream в iframe
    #37998608
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
студент22в Property TextOfLTheoryFile As %Stream.GlobalBinary лежит .doc документ, можно .mht.
может есть другие варианты отображения на zen?

doc, думаю вряд ли получиться в IFrame да и с MHT могут проблемы возникнуть особенно если это не IE
...
Рейтинг: 0 / 0
показать stream в iframe
    #37998653
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
перечитал внимательнее, понял что у вас все работает, но проблема в том что файлы скачиваются когда как вы хотите чтобы они отобразились там
попробуйте с файлами htm, txt
как они будут себя вести там, потому как doc скорее всего должен просто скачаться, возможно еще PDF получится встроить
...
Рейтинг: 0 / 0
показать stream в iframe
    #37998663
студент22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMor,
реклама все врет

пробовал разные форматы, все загружаются в файл %CSP.StreamServer.cls
...
Рейтинг: 0 / 0
показать stream в iframe
    #37998669
студент22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
эхххх, не видать мне зачета кажется, придется топать на экзамен...
...
Рейтинг: 0 / 0
показать stream в iframe
    #37998700
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
студент22DAiMor,
реклама все врет

пробовал разные форматы, все загружаются в файл %CSP.StreamServer.cls

Тогда проверяй правильный ли у тебя в стриме сохранен ContentType, потому как загружать как файл или нет решает браузер основываясь на его типе
...
Рейтинг: 0 / 0
показать stream в iframe
    #37998758
студент22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMor,

а как это сделать?

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
ClassMethod %OnSubmit(pSubmit As %ZEN.Submit) As %Status
{
if $data(%request.MimeData("$V_File",1))&&$isobject(%request.MimeData("$V_File",1)) {

	set FileObj =##class(DATA.BookLessonTheory).%OpenId(%session.Get("IDBookFileTutor"))
	set FileObj.TextOfLTheoryFile = ##class(%Stream.GlobalBinary).%New()

	set stream = %request.GetMimeData("$V_File",1)
	do stream.SetAttribute("ContentType","application/msword")
	
	Set status = FileObj.TextOfLTheoryFile.CopyFrom(stream)

	set status = FileObj.%Save()

	if $$$ISOK(status) {
	set ^CacheTempPav($zh,"rc")="OK"
	} else {
	do $system.Status.DecomposeStatus(status, .errors)
	merge ^CacheTempPav($zh,"rc")=errors
	}
	set status = FileObj.%Close()
	}
	Quit $$$OK
}


do stream.SetAttribute("ContentType","application/msword") так?
...
Рейтинг: 0 / 0
показать stream в iframe
    #37998774
Шваров Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
студент22эхххх, не видать мне зачета кажется, придется топать на экзамен...
А какой вуз?
...
Рейтинг: 0 / 0
показать stream в iframe
    #37998784
студент22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Шваров Евгений,

www.enu.kz
...
Рейтинг: 0 / 0
показать stream в iframe
    #37999117
neznau
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
студент22DAiMor,

а как это сделать?

Код: javascript
1.
2.
3.
4.
5.
...
	do stream.SetAttribute("ContentType","application/msword")
...
	Quit $$$OK
}


do stream.SetAttribute("ContentType","application/msword") так?

Я с ZEN не работал, поэтому примером кода не помогу.
Но тут имелся ввиду ContentType заголовока HTTP-ответа.
Поищи, как он выставляется в ZEN...
...
Рейтинг: 0 / 0
показать stream в iframe
    #37999123
neznau
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
neznauстудент22DAiMor,

а как это сделать?

Код: javascript
1.
2.
3.
4.
5.
...
	do stream.SetAttribute("ContentType","application/msword")
...
	Quit $$$OK
}


do stream.SetAttribute("ContentType","application/msword") так?

Я с ZEN не работал, поэтому примером кода не помогу.
Но тут имелся ввиду ContentType заголовока HTTP-ответа.
Поищи, как он выставляется в ZEN...

и, скорее всего нужен один из этих типов
http://msdn.microsoft.com/en-us/library/ms526971%28v=exchg.10%29.aspx

Твой application/msword наоборот предложит в браузере либо открыть вордом либо скачать..
...
Рейтинг: 0 / 0
показать stream в iframe
    #37999173
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
студент22DAiMor,

а как это сделать?

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
ClassMethod %OnSubmit(pSubmit As %ZEN.Submit) As %Status
{
if $data(%request.MimeData("$V_File",1))&&$isobject(%request.MimeData("$V_File",1)) {

	set FileObj =##class(DATA.BookLessonTheory).%OpenId(%session.Get("IDBookFileTutor"))
	set FileObj.TextOfLTheoryFile = ##class(%Stream.GlobalBinary).%New()

	set stream = %request.GetMimeData("$V_File",1)
	do stream.SetAttribute("ContentType","application/msword")
	
	Set status = FileObj.TextOfLTheoryFile.CopyFrom(stream)

	set status = FileObj.%Save()

	if $$$ISOK(status) {
	set ^CacheTempPav($zh,"rc")="OK"
	} else {
	do $system.Status.DecomposeStatus(status, .errors)
	merge ^CacheTempPav($zh,"rc")=errors
	}
	set status = FileObj.%Close()
	}
	Quit $$$OK
}


do stream.SetAttribute("ContentType","application/msword") так?

Да, похоже что верно делаешь
но как я уже неоднократно писал, с такими файлами этот номер не пройдет
попробуй txt, html, xml, ну и в крайнем случае pdf только если плагин имеется, если сам браузер может открыть его так
и поставить верные типы ContentType, браузер в некоторых случаях его сам передает, либо нужно угадать самому
...
Рейтинг: 0 / 0
показать stream в iframe
    #37999614
студент22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
neznau,

пробовал несколько вариантов contenttype
не помогает
...
Рейтинг: 0 / 0
показать stream в iframe
    #37999615
студент22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMor,
пробовал, не работает.
работает только pdf, и тот, только через плагин, да и не в любом браузере, хром вообще не понимает его
...
Рейтинг: 0 / 0
показать stream в iframe
    #37999665
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
студент22 ,

Class test.b Extends %Persistent
{

Property text As %GlobalBinaryStream;

}

Class test.a Extends %ZEN.Component.page
{

/// Этот блок Style содержит определение CSS-стиля страницы.
XData Style
{
<style type="text/css">
</style>
}

XData Contents [ XMLNamespace = " http://www.intersystems.com/zen"  ]
{
<page xmlns=" http://www.intersystems.com/zen"  title="">
  <iframe id="if" width="1200px" height="800px"/>
</page>
}

Method %OnAfterCreatePage() As %Status
{
  set stream=##class(test.b).%OpenId(1).text

  do stream.SetAttribute("ContentType","application/pdf")
  set ..%GetComponentById("if").src="%25CSP.StreamServer.cls?STREAMOID="_..Encrypt(stream.%Oid())

  ; или так set ..%GetComponentById("if").src="%25CSP.StreamServer.cls?CONTENTTYPE=application/pdf&STREAMOID="_..Encrypt(stream.%Oid())

  Quit $$$OK
}

}

txt, pdf, doc, docx отображаются непосредственно в браузере при наличии соответствующих плагинов (проверял в IE9).
Для файлов MS Office, возможно, дополнительно понадобится в реестре изменить некоторые параметры (на стороне клиента ):
Ключи для возможности встраивания файлов MS Office в WebBrowser

Убираем диалоговое окно выбора действий с загружаемыми в WebBrowser файлами MS Office
...
Рейтинг: 0 / 0
показать stream в iframe
    #37999732
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
студент22DAiMor,
пробовал, не работает.
работает только pdf, и тот, только через плагин, да и не в любом браузере, хром вообще не понимает его
PDF все таки работает, значит делаете все верно, а с чем не получилось ?
...
Рейтинг: 0 / 0
показать stream в iframe
    #38001603
студент22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMor,
проблема была в том что браузер не понимал тип потока (тестил в мозиле, хроме и ИЕ)
помогло вот это %25CSP.StreamServer.cls?CONTENTTYPE=application/pdf&STREAMOID=
...
Рейтинг: 0 / 0
показать stream в iframe
    #38001605
студент22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit,

добавил третий класс где открывался пдф по вашему примеру и перенес его ссылку в первый класс. во втором классе загружал в с свойство сам поток.
как писал выше проблема была в CONTENTTYPE=application/pdf

СПАСИБО ВСЕМ
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / показать stream в iframe
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]