powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Загрузка файла на сервер используя ZEN
22 сообщений из 22, страница 1 из 1
Загрузка файла на сервер используя ZEN
    #35319174
Abdullah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет,
Нашел на форуме пример как загрузить файл используя CSP, но в Zen так сделать не получается. Не пойму куда при сабмите загружается файл(в СSP это %request.MimeData("FileStream")). Может кто-нибудь знает. Помогите плз.
Спасибо.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen" title="">

<form id="MyForm" layout="vertical" 
	key=""
	OnLoadForm=""
	OnSubmitForm="Upl"
>

	
<fileUpload id="FileStream" label="Прикрепить файл:"/>
<submit caption="Submit" action="save" />


</form>

</page>
ClassMethod Upl(pSubmit As %ZEN.Submit) [ ZenMethod ]
{
	
		set loaded= 1 
		set dirc="E:\Stream"
		set file=##class(%File).%New(dirc_"\asd.txt")
		do file.Open("WSN")
    while '(loaded>%request.GetMimeData("FileStream").Size)
		{
			set cont=%request.GetMimeData("FileStream").Read(loaded)
		    do file.Write(cont)
			set loaded=loaded+ 1 
		}

	d file.%Close()
}
}


...
Рейтинг: 0 / 0
Загрузка файла на сервер используя ZEN
    #35322385
kravt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вариант загрузки файла в БД:

Class AttachedFile Extends %Persistent
{

Property FileData As %Stream.GlobalBinary;

Property FileName As %String;

Property FileSize As %Integer;

}

Class FileUpload Extends %ZEN.Component.page
{
Parameter APPLICATION = "TestUploadFile";

Parameter PAGENAME = "UploadFile";

/// Domain used for localization.
Parameter DOMAIN;

/// This Style block contains page-specific CSS style definitions.
XData Style
{
<style type="text/css">
</style>
}

/// This XML block defines the contents of this page.
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen" title="">
<form id="FileForm" labelPosition="left" enctype="multipart/form-data"><!-- should be enctype="multipart/form-data" -->
<fileUpload label="File:" id="File" name="File"/>
<hgroup align="right">
<submit caption="Submit" action="submit"/><spacer width="5"/>
<button caption="Cancel" onclick="window.close();"/>
</hgroup>
</form>
</page>
}

/// Загрузка файла в базу как %Stream.GlobalBinary
ClassMethod %OnSubmit(pSubmit As %ZEN.Submit) As %Status
{
if $data(%request.MimeData("$V_File",1))&&$isobject(%request.MimeData("$V_File",1)) {

set FileObj =##class(AttachedFile).%New()
set FileObj.FileName = %request.MimeData("$V_File",1).FileName
set FileObj.FileSize = %request.MimeData("$V_File",1).Size
set FileObj.FileData = ##class(%Stream.GlobalBinary).%New()

set stream = %request.GetMimeData("$V_File",1)
Set status = FileObj.FileData.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
}

}
...
Рейтинг: 0 / 0
Загрузка файла на сервер используя ZEN
    #35322399
kravt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если не хотите хранить файло в базе, то не составит большого труда взять streams из %request и положить в папку на сервере.
...
Рейтинг: 0 / 0
Загрузка файла на сервер используя ZEN
    #35334295
Abdullah
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cпс биг, очень помог. Для того чтоб положить на диск сделал так:
ClassMethod %OnSubmit(pSubmit As %ZEN.Submit) As %Status
{
if $d(%request.MimeData("$V_File",1))&&$isobject(%request.MimeData("$V_File",1))
{

s file=##class(%FileBinaryStream).%New()
s file.Filename="E:/Stream/as.pdf"
s stream=%request.GetMimeData("$V_File",1)
s status=file.CopyFrom(stream)
s status=file.%Save()

}
QUIT $$$OK
}
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Загрузка файла на сервер используя ZEN
    #37937130
armin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kravtВариант загрузки файла в БД:

Class AttachedFile Extends %Persistent
{

Property FileData As %Stream.GlobalBinary;

Property FileName As %String;

Property FileSize As %Integer;

}

Class FileUpload Extends %ZEN.Component.page
{
Parameter APPLICATION = "TestUploadFile";

Parameter PAGENAME = "UploadFile";

/// Domain used for localization.
Parameter DOMAIN;

/// This Style block contains page-specific CSS style definitions.
XData Style
{
<style type="text/css">
</style>
}

/// This XML block defines the contents of this page.
XData Contents [ XMLNamespace = " http://www.intersystems.com/zen" ]
{
<page xmlns=" http://www.intersystems.com/zen" title="">
<form id="FileForm" labelPosition="left" enctype="multipart/form-data"><!-- should be enctype="multipart/form-data" -->
<fileUpload label="File:" id="File" name="File"/>
<hgroup align="right">
<submit caption="Submit" action="submit"/><spacer width="5"/>
<button caption="Cancel" onclick="window.close();"/>
</hgroup>
</form>
</page>
}

/// Загрузка файла в базу как %Stream.GlobalBinary
ClassMethod %OnSubmit(pSubmit As %ZEN.Submit) As %Status
{
if $data(%request.MimeData("$V_File",1))&&$isobject(%request.MimeData("$V_File",1)) {

set FileObj =##class(AttachedFile).%New()
set FileObj.FileName = %request.MimeData("$V_File",1).FileName
set FileObj.FileSize = %request.MimeData("$V_File",1).Size
set FileObj.FileData = ##class(%Stream.GlobalBinary).%New()

set stream = %request.GetMimeData("$V_File",1)
Set status = FileObj.FileData.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
}

}

Подскажите, как при нажатии Submit закрыть окно добавления файла вызванное через zenPage.launchPopupWindow и обновить табличку со списком файлов!?
...
Рейтинг: 0 / 0
Загрузка файла на сервер используя ZEN
    #37937158
Фотография П.С.М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
armin
Подскажите, как при нажатии Submit закрыть окно добавления файла вызванное через zenPage.launchPopupWindow

window.close() не работает?
armin и обновить табличку со списком файлов!?
перерисовать эту табличку.
...
Рейтинг: 0 / 0
Загрузка файла на сервер используя ZEN
    #37937215
armin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П.С.М.arminПодскажите, как при нажатии Submit закрыть окно добавления файла вызванное через zenPage.launchPopupWindow

window.close() не работает?
armin и обновить табличку со списком файлов!?
перерисовать эту табличку.

НЕТ не помагает!

Получаеться, что я форму закрываю но сабмит еще не сработал потому таблица и не обновляетья! Как сделать, что бы %OnSubmit срабатывал раньше чем SaveExit() ???
...
Рейтинг: 0 / 0
Загрузка файла на сервер используя ZEN
    #38053624
feanorcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А мне вот интересно, когда нажимается кнопка Submit, как провести необходимые проверки ввода, чтобы ничего не подвисало и можно было провести откат операции?
...
Рейтинг: 0 / 0
Загрузка файла на сервер используя ZEN
    #38054234
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feanorcheg , у каждой формы есть onsubmit - используй его для проверок.
...
Рейтинг: 0 / 0
Загрузка файла на сервер используя ZEN
    #38054501
feanorcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,

разумеется использовал. Но в нём, если использовать конструкцию &js<> то страница вешает намертво одно из ядер операционки. В процессах системы хорошо можно отследить процесс, сжирающий её ресурсы httpd.exe. Короче если проверка не удалась - надо вывести сообщение о неисправности, но как это сделать без javascript не пойму
...
Рейтинг: 0 / 0
Загрузка файла на сервер используя ZEN
    #38054547
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feanorcheg ,

Можете привести простой тестовый пример?
...
Рейтинг: 0 / 0
Загрузка файла на сервер используя ZEN
    #38054602
feanorcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ClassMethod %OnSubmit(pSubmit As %ZEN.Submit) As %Status
{
  if $isObject(%request.MimeData("$V_FileStream",1)) 
  {
    s internalCode="DealId"_$g(LoanID)
    s res=##class(Application.UpLoadFile).UpLoadFileFromWEB(%request.MimeData("$V_FileStream",1),DocName,internalCode,.FileID)
    if $$$ISERR(res)
    {
      set ErrorText="\nОшибка загрузки файла "_$system.Status.GetErrorText(res)
      &js<alert("Ошибки при вводе:\n"+'#(ErrorText)#');> 
      quit $$$OK
    }
  }
  else
  {
    &js<alert("Ошибка файла");> 
    quit $$$OK
  }
  quit $$$OK
}
...
Рейтинг: 0 / 0
Загрузка файла на сервер используя ZEN
    #38054613
feanorcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это, разумеется, помимо проверок ввода и прочего
...
Рейтинг: 0 / 0
Загрузка файла на сервер используя ZEN
    #38054681
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feanorcheg ,

По поводу вызова &js<...> из метода %OnSubmit уже было: 12864714

PS: для уведомления об ошибке попробуйте метод pSubmit.%SetError() .
...
Рейтинг: 0 / 0
Загрузка файла на сервер используя ZEN
    #38054694
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feanorchegесли использовать конструкцию &js<> то страница вешает намертво одно из ядер операционки
Я так вообще такое не использую...
Поскольку считаю, что клиентская часть должна работать на клиенте, нефиг её на сервер тянуть и от туда запускать.
...
Рейтинг: 0 / 0
Загрузка файла на сервер используя ZEN
    #38055784
Ivan.Kokov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsafeanorchegесли использовать конструкцию &js<> то страница вешает намертво одно из ядер операционки
Я так вообще такое не использую...
Поскольку считаю, что клиентская часть должна работать на клиенте, нефиг её на сервер тянуть и от туда запускать.
Согласен. Мухи отдельно, котлеты отдельно Я бы не стал обходиться без js: js инициирует загрузку, вызвав серверный метод, получает результат, при необходимости отображает.
Не должен метод класса заботиться об отображении ошибки. Не царское это дело
...
Рейтинг: 0 / 0
Загрузка файла на сервер используя ZEN
    #38056480
feanorcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати а у меня еще такая проблема: когда я выхожу в следствии ошибки из %onsubmit у меня форма как будто обновляется... Как от этого избавиться? Например полей сотня, не заново же их перевводить
...
Рейтинг: 0 / 0
Загрузка файла на сервер используя ZEN
    #38056735
Ivan.Kokov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
feanorchegКстати а у меня еще такая проблема: когда я выхожу в следствии ошибки из %onsubmit у меня форма как будто обновляется... Как от этого избавиться? Например полей сотня, не заново же их перевводить
Думаю, что "не как-будто". Она и должна обновляться. Это же все-таки submit. А он вызывается для отправки формы на сервер.
Данные можно переввести в поля формы из %request'a. Хотя м.б. в ZEN'e это делается более изящно
...
Рейтинг: 0 / 0
Загрузка файла на сервер используя ZEN
    #38056787
Ivan.Kokov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Впрочем, до субмита дело может и не дойти, в случае, если возникла непредвиденная ошибка, из за которой вы проскочете мимо
всех
Код: sql
1.
 quit $$$OK 


В этом случае вы, вероятнее всего, попадете на страницу ошибки
...
Рейтинг: 0 / 0
Загрузка файла на сервер используя ZEN
    #38096190
feanorcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Друзья, использовал весь механизм, описанный в примерах, но файлы грузятся ну оооочень медленно. Из-за этого страдает вообще всё приложение. Я тут подумал, может вы знаете, как напрямую передавать файлы на сервер, а не через gateway?
...
Рейтинг: 0 / 0
Загрузка файла на сервер используя ZEN
    #38096198
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feanorcheg ,

FTP
...
Рейтинг: 0 / 0
Загрузка файла на сервер используя ZEN
    #38116257
feanorcheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал апплодер, загружающий на сервер файлы до 300 КБ примерно за 40 сек... Однако файлы большего размера он просто отказывается грузить большие файлы чем 400 КБ. Где-то 2 минуты идут попытки загрузить этот файл на сервер, после чего окно закрывается, якобы файл загрузился, но на деле это не так.

Дело не в тайм-ауте, сервер расположен на IIS. Уже не знаю что и делать
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Загрузка файла на сервер используя ZEN
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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