Гость
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Загрузка файла на сервер используя ZEN / 22 сообщений из 22, страница 1 из 1
18.05.2008, 11:33
    #35319174
Abdullah
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка файла на сервер используя ZEN
Всем привет,
Нашел на форуме пример как загрузить файл используя 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
20.05.2008, 10:18
    #35322385
kravt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка файла на сервер используя ZEN
Вариант загрузки файла в БД:

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
20.05.2008, 10:21
    #35322399
kravt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка файла на сервер используя ZEN
Если не хотите хранить файло в базе, то не составит большого труда взять streams из %request и положить в папку на сервере.
...
Рейтинг: 0 / 0
26.05.2008, 08:52
    #35334295
Abdullah
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка файла на сервер используя ZEN
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
Период между сообщениями больше года.
30.08.2012, 14:21
    #37937130
armin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка файла на сервер используя ZEN
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
30.08.2012, 14:35
    #37937158
П.С.М.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка файла на сервер используя ZEN
armin
Подскажите, как при нажатии Submit закрыть окно добавления файла вызванное через zenPage.launchPopupWindow

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

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

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

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

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

Можете привести простой тестовый пример?
...
Рейтинг: 0 / 0
27.11.2012, 12:46
    #38054602
feanorcheg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка файла на сервер используя ZEN
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
27.11.2012, 12:49
    #38054613
feanorcheg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка файла на сервер используя ZEN
это, разумеется, помимо проверок ввода и прочего
...
Рейтинг: 0 / 0
27.11.2012, 13:11
    #38054681
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка файла на сервер используя ZEN
feanorcheg ,

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

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


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

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

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


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