Гость
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / показать stream в iframe / 21 сообщений из 21, страница 1 из 1
14.10.2012, 10:48
    #37997439
студент22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
показать stream в iframe
есть класс со свойством 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
14.10.2012, 12:10
    #37997475
студент22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
показать stream в iframe
...
Рейтинг: 0 / 0
15.10.2012, 08:04
    #37997928
студент22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
показать stream в iframe
в Property TextOfLTheoryFile As %Stream.GlobalBinary лежит .doc документ, можно .mht.
может есть другие варианты отображения на zen?
...
Рейтинг: 0 / 0
15.10.2012, 13:00
    #37998417
студент22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
показать stream в iframe
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
15.10.2012, 14:02
    #37998608
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
показать stream в iframe
студент22в Property TextOfLTheoryFile As %Stream.GlobalBinary лежит .doc документ, можно .mht.
может есть другие варианты отображения на zen?

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

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

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

Тогда проверяй правильный ли у тебя в стриме сохранен ContentType, потому как загружать как файл или нет решает браузер основываясь на его типе
...
Рейтинг: 0 / 0
15.10.2012, 15:02
    #37998758
студент22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
показать stream в iframe
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
15.10.2012, 15:09
    #37998774
Шваров Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
показать stream в iframe
студент22эхххх, не видать мне зачета кажется, придется топать на экзамен...
А какой вуз?
...
Рейтинг: 0 / 0
15.10.2012, 15:17
    #37998784
студент22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
показать stream в iframe
Шваров Евгений,

www.enu.kz
...
Рейтинг: 0 / 0
15.10.2012, 18:15
    #37999117
neznau
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
показать stream в iframe
студент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
15.10.2012, 18:18
    #37999123
neznau
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
показать stream в iframe
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
15.10.2012, 18:58
    #37999173
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
показать stream в iframe
студент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
16.10.2012, 07:10
    #37999614
студент22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
показать stream в iframe
neznau,

пробовал несколько вариантов contenttype
не помогает
...
Рейтинг: 0 / 0
16.10.2012, 07:12
    #37999615
студент22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
показать stream в iframe
DAiMor,
пробовал, не работает.
работает только pdf, и тот, только через плагин, да и не в любом браузере, хром вообще не понимает его
...
Рейтинг: 0 / 0
16.10.2012, 09:00
    #37999665
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
показать stream в iframe
студент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
16.10.2012, 09:38
    #37999732
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
показать stream в iframe
студент22DAiMor,
пробовал, не работает.
работает только pdf, и тот, только через плагин, да и не в любом браузере, хром вообще не понимает его
PDF все таки работает, значит делаете все верно, а с чем не получилось ?
...
Рейтинг: 0 / 0
17.10.2012, 06:50
    #38001603
студент22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
показать stream в iframe
DAiMor,
проблема была в том что браузер не понимал тип потока (тестил в мозиле, хроме и ИЕ)
помогло вот это %25CSP.StreamServer.cls?CONTENTTYPE=application/pdf&STREAMOID=
...
Рейтинг: 0 / 0
17.10.2012, 06:53
    #38001605
студент22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
показать stream в iframe
servit,

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

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


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