-
-
Save anonymous/f7077e6a1c775de931b2 to your computer and use it in GitHub Desktop.
Cache FileUpload
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<Export generator="Cache" version="24"> | |
<Class name="habr.CSPFileUpload"> | |
<Super>%CSP.Page</Super> | |
<TimeCreated>62777,40169.490847</TimeCreated> | |
<Method name="OnPage"> | |
<ClassMethod>1</ClassMethod> | |
<ReturnType>%Status</ReturnType> | |
<Implementation><![CDATA[ | |
#; был передан файл, поэтому ответим браузеру, о том что приняли файл и как | |
if $d(%request.Data("loadFile")) { | |
if $lv(%loadFileSuccess),$lg(%loadFileSuccess,1) { | |
#; файл принят удачно, ответим об удачном приеме и отправим имя файла и его размер | |
w "{""success"":true,", | |
"""fileName"":"""_$lg(%loadFileSuccess,2)_""",", | |
"""fileSize"":"""_$lg(%loadFileSuccess,3)_"""}" | |
} else { | |
#; произошла ошибка при приеме файла | |
w "{""error"":""Error load file""}" | |
} | |
q $$$OK | |
} | |
#; HTML форма для отправки файлов | |
&html<<!DOCTYPE HTML> | |
<html> | |
<!-- Подключим стиль Fine Uploader --> | |
<link href="fileuploader.css" rel="stylesheet" type="text/css"> | |
<!-- Стили Bootstrap, для визуального оформления --> | |
<link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css"> | |
<link href="bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet" type="text/css"> | |
<body> | |
<!-- Это будет полем для файла --> | |
<div id="thumbnail-fine-uploader" style='width:400px' ></div> | |
<!-- jQuery --> | |
<script type="text/javascript" src="jquery.js"></script> | |
<!-- скрипт Fine Uploader --> | |
<script type="text/javascript" src="fileuploader.js"></script> | |
<!-- скрипт Bootstrap --> | |
<script type="text/javascript" src="bootstrap/js/bootstrap.min.js"></script> | |
<script type="text/javascript" > | |
// Запустим Fine Uploader | |
$(document).ready(function() { | |
var thumbnailuploader = new qq.FileUploader({ | |
element: $('#thumbnail-fine-uploader')[0], // наш элемент | |
// здесь, укажем адрес страницы загрузичика файла, в данном случае это текущий класс | |
action: '#(..%ClassName(1)_".cls")#', | |
// Дополнительные параметры, передаваемые вместе с файлом | |
params: { | |
loadFile: 1 | |
}, | |
// Разрешим загрузку нескольких файлов | |
multiple: true, | |
// Допустимые типы файлов | |
allowedExtensions: ['jpeg', 'jpg', 'gif', 'png'], | |
// Ограничение размера файлов | |
sizeLimit: 5120000, | |
onComplete: function(id, fileName, responseJSON) { | |
if (responseJSON.success) { | |
// Файл успешно отправлен, добавим информацию | |
$('#thumbnail-fine-uploader') | |
.append('<div><span>Loaded File: '+responseJSON.fileName+'</span>'+ | |
'<span> File size: '+responseJSON.fileSize+'</span></div>'); | |
} | |
} | |
}); | |
}); | |
</script> | |
</body> | |
</html>> | |
Quit $$$OK | |
]]></Implementation> | |
</Method> | |
<Method name="OnPreHTTP"> | |
<ClassMethod>1</ClassMethod> | |
<ReturnType>%Boolean</ReturnType> | |
<ServerOnly>1</ServerOnly> | |
<Implementation><![CDATA[ | |
#; Передан файл | |
if $d(%request.Data("loadFile")) { | |
s %loadFileSuccess=0 | |
#; поле с файлом | |
s FieldName="qqfile" | |
#; получим содержимое файла | |
i %request.IsDefinedMimeData(FieldName,1) { | |
s ContentType=%request.MimeData(FieldName,1).ContentType | |
s Content=%request.MimeData(FieldName,1) | |
} else { | |
s ContentType=%request.ContentType | |
s Content=%request.Content | |
} | |
s:FieldName'="" fileName=$g(%request.Data(FieldName,1)) | |
#; если файл получен, и он не нулевого размера, соберем информацию по нему | |
i $isobject(Content),Content.Size>0 s %loadFileSuccess=$lb(1,$g(fileName),Content.Size) | |
q 1 | |
} | |
q 1 | |
]]></Implementation> | |
</Method> | |
</Class> | |
<Class name="habr.ZENFileUpload"> | |
<Description> | |
Created using the page template: Default</Description> | |
<Super>%ZEN.Component.page</Super> | |
<TimeCreated>62777,40264.333639</TimeCreated> | |
<Parameter name="PAGENAME"> | |
<Description> | |
Отображаемое имя для нового приложения.</Description> | |
<Default>Test FileUploader</Default> | |
</Parameter> | |
<Parameter name="CSSINCLUDES"> | |
<Description> | |
Стили</Description> | |
<Type>STRING</Type> | |
<Default>fileuploader.css,bootstrap/css/bootstrap.min.css,bootstrap/css/bootstrap-responsive.min.css</Default> | |
</Parameter> | |
<Parameter name="JSINCLUDES"> | |
<Description> | |
JS-файлы</Description> | |
<Type>STRING</Type> | |
<Default>jquery.js,fileuploader.js,bootstrap/js/bootstrap.min.js</Default> | |
</Parameter> | |
<XData name="Contents"> | |
<Description> | |
Этот XML блок описывает содержимое этой страницы.</Description> | |
<XMLNamespace>http://www.intersystems.com/zen</XMLNamespace> | |
<Data><![CDATA[ | |
<page xmlns="http://www.intersystems.com/zen" title=""> | |
<!-- Блок для отображения поля для загрузки файла --> | |
<pane id="thumbnail-fine-uploader" width="400px"/> | |
</page> | |
]]></Data> | |
</XData> | |
<Method name="onloadHandler"> | |
<Description> | |
После загрузки страницы, запустим компоненту</Description> | |
<Language>javascript</Language> | |
<ClientMethod>1</ClientMethod> | |
<Implementation><![CDATA[ | |
var thumbnailuploader = new qq.FileUploader({ | |
element: $('#thumbnail-fine-uploader')[0], // наш элемент | |
// здесь, укажем адрес страницы загрузичика файла, в данном случае это текущий класс | |
action: '?', | |
// Дополнительные параметры, передаваемые вместе с файлом | |
params: { | |
loadFile: 1 | |
}, | |
// Разрешим загрузку нескольких файлов | |
multiple: true, | |
// Допустимые типы файлов | |
allowedExtensions: ['jpeg', 'jpg', 'gif', 'png'], | |
// Ограничение размера файлов | |
sizeLimit: 5120000, | |
onComplete: function(id, fileName, responseJSON) { | |
if (responseJSON.success) { | |
// Файл успешно отправлен, добавим информацию | |
$('#thumbnail-fine-uploader') | |
.append('<div><span>Loaded File: '+responseJSON.fileName+'</span>'+ | |
'<span> File size: '+responseJSON.fileSize+'</span></div>'); | |
} | |
} | |
}); | |
]]></Implementation> | |
</Method> | |
<Method name="%OnPreHTTP"> | |
<Description><![CDATA[ | |
Zen page notification of an HTTP request. This method can be overwritten | |
by subclasses.<br/> | |
This is called <em>before</em> the standard Zen pre-HTTP processing occurs.]]></Description> | |
<ClassMethod>1</ClassMethod> | |
<ReturnType>%Boolean</ReturnType> | |
<ServerOnly>1</ServerOnly> | |
<Implementation><![CDATA[ | |
#; Передан файл | |
if $d(%request.Data("loadFile")) { | |
s %loadFileSuccess=0 | |
#; поле с файлом | |
s FieldName="qqfile" | |
#; получим содержимое файла | |
i %request.IsDefinedMimeData(FieldName,1) { | |
s ContentType=%request.MimeData(FieldName,1).ContentType | |
s Content=%request.MimeData(FieldName,1) | |
} else { | |
s ContentType=%request.ContentType | |
s Content=%request.Content | |
} | |
s:FieldName'="" fileName=$g(%request.Data(FieldName,1)) | |
#; если файл получен, и он не нулевого размера, соберем информацию по нему | |
i $isobject(Content),Content.Size>0 s %loadFileSuccess=$lb(1,$g(fileName),Content.Size) | |
q 1 | |
} | |
q 1 | |
]]></Implementation> | |
</Method> | |
<Method name="%DrawHTMLPage"> | |
<Description> | |
Для обработки загрузки файла переопределим метод рисования стрицы</Description> | |
<Implementation><![CDATA[ | |
#; Если была загрузка файла на сервер, вернем статус загрузки в формате JSON | |
if $d(%request.Data("loadFile")) { | |
if $lv(%loadFileSuccess),$lg(%loadFileSuccess,1) { | |
#; файл принят удачно, ответим об удачном приеме и отправим имя файла и его размер | |
w "{""success"":true,", | |
"""fileName"":"""_$lg(%loadFileSuccess,2)_""",", | |
"""fileSize"":"""_$lg(%loadFileSuccess,3)_"""}" | |
} else { | |
#; произошла ошибка при приеме файла | |
w "{""error"":""Error load file""}" | |
} | |
q | |
} | |
#; Иначе отрисуем страницу по умолчанию | |
d ##super() | |
]]></Implementation> | |
</Method> | |
<Parameter name="SHOWSTATS"> | |
<Description> | |
Отключим вывод времени формирования страницы в конце страницы </Description> | |
<Type>BOOLEAN</Type> | |
<Default>0</Default> | |
</Parameter> | |
</Class> | |
</Export> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment