Skip to content

Instantly share code, notes, and snippets.

Created November 16, 2012 07:13
Show Gist options
  • Save anonymous/f7077e6a1c775de931b2 to your computer and use it in GitHub Desktop.
Save anonymous/f7077e6a1c775de931b2 to your computer and use it in GitHub Desktop.
Cache FileUpload
<?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