powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / свойство %FileBinaryStream и толстый клиент
25 сообщений из 30, страница 1 из 2
свойство %FileBinaryStream и толстый клиент
    #38284013
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую!

помогите советом, пожалуйста

есть класс, в котором одно из свойств определено как:
Код: sql
1.
Property fBin As %FileBinaryStream;


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

вопрос: можно ли как то заставить толстого клиента, в данном случае, получить тот стрим файл, который находится на сервере?
с общим расшаренным сетевым ресурсом вариант рассмотрел, может еще что есть?
...
Рейтинг: 0 / 0
свойство %FileBinaryStream и толстый клиент
    #38284029
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая сложная система
толстый клиент вместе с БД Cache ?
а соединение с сервером через ECP ?
и сколько же таких "толстых клиентов"

по теме, а что вы потом с этим файлом делаете ?
и опять же в зависимости от того как подключение с сервером осуществляется и решать как забирать файл с сервера
брать например просто по ECP и не париться где он находится, по идее он возможно должен нормально кешироваться если это необходимо.
...
Рейтинг: 0 / 0
свойство %FileBinaryStream и толстый клиент
    #38284073
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"ворошим старьё" )))
DAiMorтолстый клиент вместе с БД Cache ?
а соединение с сервером через ECP ?
и сколько же таких "толстых клиентов"

да, по ECP, в одном месте порядка 140 "толстячков"
DAiMorпо теме, а что вы потом с этим файлом делаете ?

пока нужно создать директорию на "толстячке" и скопировать туда этот файл
DAiMorи опять же в зависимости от того как подключение с сервером осуществляется и решать как забирать файл с сервера
брать например просто по ECP и не париться где он находится, по идее он возможно должен нормально кешироваться если это необходимо.
можно по подробней, плиз ))
...
Рейтинг: 0 / 0
свойство %FileBinaryStream и толстый клиент
    #38284223
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ECP позволяет обращаться к глобалам сервера прозрачно для работы приложения
приведу пример по нашему приложению которое работает по ECP и активно использует хранение файлов в Cache
так вот наше приложение работает через WEB но пользователи могут попасть на любой доступный ECP-клиент (распределяя нагрузку)
все файлы доступны пользователю в любом случае, со стороны кода ничего делать не было необходимости все работает прозрачно для нас. открываем объект получаем файл, а то что файл находится на другом сервере, значения не имеет подгрузится через ECP. Если какой то файл будет использоваться очень часто, то он еще и будет закеширован на ECP-клиенте, и он не будет часто перегружаться с сервера.
...
Рейтинг: 0 / 0
свойство %FileBinaryStream и толстый клиент
    #38284262
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ymka2007да, по ECP, в одном месте порядка 140 "толстячков"
...
Рейтинг: 0 / 0
свойство %FileBinaryStream и толстый клиент
    #38284389
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMorYmka2007да, по ECP, в одном месте порядка 140 "толстячков"

ну да )), это чужая старая прихоть ))

когда конфигурировал, я намепил только пакет
ECP на сервер уже был настроен
может быть что то еще нужно?

почему то, я думал что в такой конфигурации должно все получится, но видать что то не до конфигурировал
как бы проверить
...
Рейтинг: 0 / 0
свойство %FileBinaryStream и толстый клиент
    #38284390
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
давайте начнем с того что не получается на примерах ?
...
Рейтинг: 0 / 0
свойство %FileBinaryStream и толстый клиент
    #38284421
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMor,
не поздно? не сильно отвлеку?

первое что проверил на толстом: в студии классы видны, в портале и терминале глобаль видна
при загрузке файла с толстого клиента с помощью ZEN страницы получилось следующее:
1. в глобаль прописался путь которого не должно было быть (первый файл с тонкого клиента грузил - лег куда надо)
2. файл нашел, локально на толстом клиенте в папке, прописанной в ^%SYS("TempDir")
3. При попытке получить файл - если тонкий клиент, то файл получаю используя %File.CopyFrom() там где нужно
в то время если я использую толстого, то используя тот же код файл получаю там где нужно, но он 0 КБ (ПУСТОЙ) и сформирован без ошибки

вот
...
Рейтинг: 0 / 0
свойство %FileBinaryStream и толстый клиент
    #38284445
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ymka2007DAiMor,
не поздно? не сильно отвлеку?

первое что проверил на толстом: в студии классы видны, в портале и терминале глобаль видна
при загрузке файла с толстого клиента с помощью ZEN страницы получилось следующее:
1. в глобаль прописался путь которого не должно было быть (первый файл с тонкого клиента грузил - лег куда надо)
2. файл нашел, локально на толстом клиенте в папке, прописанной в ^%SYS("TempDir")
3. При попытке получить файл - если тонкий клиент, то файл получаю используя %File.CopyFrom() там где нужно
в то время если я использую толстого, то используя тот же код файл получаю там где нужно, но он 0 КБ (ПУСТОЙ) и сформирован без ошибки

вот
над толстым клиентом ZEN, еще интересней
и пример все равно получился какой то туманный
файл хранится в БД ? если так то никаких проблем с получением содержимого не должно быть
не совсем понимаю откуда взялся файл локально
если это веб приложение, то файл по идее должен скачиваться по действию пользователя, туда куда он пожелал, а у тут вроде получается что файл попадает туда куда пожелает приложение.
...
Рейтинг: 0 / 0
свойство %FileBinaryStream и толстый клиент
    #38284454
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
Property fBin As %FileBinaryStream;


вроде писал ))
файл находится (должен находиться) на сервере в папке stream, там же где и cache.dat
ZEN страничка пока написана только для загрузки файла на сервер
при тонком клиенте все нормально загружается
далее я просто на толстом клиенте запускаю метод который должен взять файл с сервера и положить его в папку на толстом клиенте
...
Рейтинг: 0 / 0
свойство %FileBinaryStream и толстый клиент
    #38284542
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ymka2007
Код: sql
1.
Property fBin As %FileBinaryStream;


вроде писал ))
файл находится (должен находиться) на сервере в папке stream, там же где и cache.dat
ZEN страничка пока написана только для загрузки файла на сервер
при тонком клиенте все нормально загружается
далее я просто на толстом клиенте запускаю метод который должен взять файл с сервера и положить его в папку на толстом клиенте
а почему бы не хранить файлы в БД а не файлами, выделить отдельную БД для их хранения и все проблемы будут решены
...
Рейтинг: 0 / 0
свойство %FileBinaryStream и толстый клиент
    #38284987
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMor,

да, можно и так
скорее всего так и придется реализовывать
а нет примерчика?
каким образом лучше сформировать класс для хранения файлов
мне кажется нужно два класса и связь между ними, чтоб файл делить на куски по 32 кб и в каждую children запись записывать?
может какая еще другая реализация возможна?

спасибо
...
Рейтинг: 0 / 0
свойство %FileBinaryStream и толстый клиент
    #38285005
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ymka2007DAiMor,

да, можно и так
скорее всего так и придется реализовывать
а нет примерчика?
каким образом лучше сформировать класс для хранения файлов
мне кажется нужно два класса и связь между ними, чтоб файл делить на куски по 32 кб и в каждую children запись записывать?
может какая еще другая реализация возможна?

спасибо
не нужно ничего делить на куски.
Код: plaintext
Property stream As %GlobalCharacterStream;
и в настройках хранения класса поправь StreamLocation, и туда укажи в каком глобале будете хранить стримы
...
Рейтинг: 0 / 0
свойство %FileBinaryStream и толстый клиент
    #38285106
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMor,

спасибо, помогло ))
посмотрел глобаль, удивился
он сам все сделал )))
...
Рейтинг: 0 / 0
свойство %FileBinaryStream и толстый клиент
    #38285136
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ymka2007 ,

Что мешает указать LOCATION : Stream Properties ?
...
Рейтинг: 0 / 0
свойство %FileBinaryStream и толстый клиент
    #38285259
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit,

если указать, то это будет серверное окружение
а когда толстый клиент, для файловой системы он берет свое окружение
как то так
...
Рейтинг: 0 / 0
свойство %FileBinaryStream и толстый клиент
    #38285429
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничего, если не буду открывать отдельную тему? Т.к. тоже про потоки.

Надо:
1- экспортировать классы, программы, etc в формате XML в глобал.
Дальше этот глобал отдаётся сторонней программе, она его передаёт куда надо - короче, это не предмет рассмотрения.

2- На "приёмном конце" надо импортировать этот глобал.

Если с (1) проблем никаких, пользуюсь:
Код: javascript
1.
2.
3.
4.
 	s str=##class(%Stream.GlobalCharacter).%New() if '$isobject(str) s sc=$$$ERROR(5001,"Could not create stream") g strq
  	k @glob
 	s str.%Location=glob
 	s sc=$system.OBJ.ExportToStream(.items, .str, qspec, .errorlog) if 'sc ...


и поток нормально ложится в глобал @glob, то с импортом подобный приём не проходит: %Location не подменить после создания потоковой oref. Приходится извращаться с копированием глобала @glob в поток:
/// На входе:
/// glob - имя глобала с экспортированными элементами (.CLS, .MAC, etc)
/// На выходе:
/// items - импортированные элементы.
ClassMethod strimp(ByRef items, glob = "", qspec = "", ByRef errorlog, listonly = 0) As %Status
{
n str, loc, sc, i
#dim str as %Stream.GlobalCharacter
k items
s sc=0
s displayname=1 ;?
if glob="" s sc=$$$ERROR(5001,"Global reference is empty") g strimpq
try {
s str=##class(%Stream.GlobalCharacter).%New() if '$isobject(str) s sc=$$$ERROR(5001,"Could not create stream") g strimpq
s loc=str.%Location
;merge @loc=@glob ; плохо - пишет лишнее
for i=1:1:@glob@(1) { ; ничего лишнего
Do str.Write(@glob@(1,i))
}
s sc=$system.OBJ.LoadStream(str, qspec, .errorlog, .items, listonly, displayname) if 'sc g strimpq
} catch {
s sc=$$$ERROR(5002,$ze) g strimpq
}
strimpq
q sc
}
Понимаю, что можно было бы создать хранимый класс со свойством типа поток и указать свойству LOCATION. Но мне это по ряду причин не подходит. Существует ли более изящное решение, чем найденное мной?
...
Рейтинг: 0 / 0
свойство %FileBinaryStream и толстый клиент
    #38285474
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslov ,

Методы класса %Studio.Project ( DeployToGbl , InstallFromGbl ) не подойдут?
...
Рейтинг: 0 / 0
свойство %FileBinaryStream и толстый клиент
    #38285478
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, пробовал. Для этой задачи, к сожалению, не подойдут.
...
Рейтинг: 0 / 0
свойство %FileBinaryStream и толстый клиент
    #38285490
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslov,
можно как то так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
USER>s str=##class(%GlobalCharacterStream).%New("^%tmp") 

USER>d str.Write("testData")                            

USER>w str.%Save()
1
USER>s id=str.%Id() zw id
id=$c(0,12,1,7,1)_"^%tmp"_$c(3,4,4,2,1)

и в другой области
Код: sql
1.
2.
3.
4.
5.
6.
SAMPLES>s id=$c(0,12,1,7,1)_"^%tmp"_$c(3,4,4,2,1)

SAMPLES>s str=##class(%GlobalCharacterStream).%OpenId(id) 

SAMPLES>w str.Read()
testData
...
Рейтинг: 0 / 0
свойство %FileBinaryStream и толстый клиент
    #38285612
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или так:  s items("Sample.Person.CLS")=""

  s glob="^tmp"
  k @glob
  
  s strFrom=##class(%Stream.GlobalBinary).%New(glob)
  d $system.OBJ.ExportToStream(.items, .strFrom)
  d strFrom.%Save()

  s oid=strFrom.%Oid()

  s strTo=##class(%Stream.Object).%Open(oid)
  d $system.OBJ.DisplayError($system.OBJ.LoadStream(strTo))
...
Рейтинг: 0 / 0
свойство %FileBinaryStream и толстый клиент
    #38285613
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,

спасибо, но в моём случае поведение немного иное. Код
Код: javascript
1.
2.
3.
4.
5.
 s str=##class(%Stream.GlobalBinary).%New(glob) if '$isobject(str) s sc=$$$ERROR(5001,"Could not create stream") g strq
 k @glob
 s sc=$system.OBJ.ExportToStream(.items, .str, qspec, .errorlog, charset) if 'sc g strq
 s sc=str.%Save() if 'sc g strq
 w !,"  Id="_str.%Id()_" str.%Location="_str.%Location,! ;de 

выводит:
Код: plaintext
1.
2.
3.
4.
Exporting to XML started on 06/04/2013 18:17:30
...
Export finished successfully.
 
  Id=1 str.%Location=^CacheTempUserStrExpImp
Т.е. в Id попадает только номер, без информации о глобале.
...
Рейтинг: 0 / 0
свойство %FileBinaryStream и толстый клиент
    #38285619
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey MaslovТ.е. в Id попадает только номер, без информации о глобалеDAiMor предложил вставлять  zw id, а не id.
...
Рейтинг: 0 / 0
свойство %FileBinaryStream и толстый клиент
    #38285627
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Maslov ,

И всё-таки %Stream.Global Binary или %Stream.Global Character ?
...
Рейтинг: 0 / 0
свойство %FileBinaryStream и толстый клиент
    #38285708
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,

пробовал и zw id, результат такой же.
%Stream.GlobalBinary или %Stream.GlobalCharacter?%Stream.GlobalBinary, хотя какая разница? Он ведь наследник %Stream.GlobalCharacter, ничего не добавлено.
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / свойство %FileBinaryStream и толстый клиент
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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