<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tales Augusto &#187; Upload</title>
	<atom:link href="http://www.talesaugusto.com.br/tag/upload/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.talesaugusto.com.br</link>
	<description>Integrando PHP e Javascript</description>
	<lastBuildDate>Thu, 07 Jan 2010 02:05:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Zend Framework + Upload+ ProgressBar</title>
		<link>http://www.talesaugusto.com.br/zend-framework-upload-progressbar/</link>
		<comments>http://www.talesaugusto.com.br/zend-framework-upload-progressbar/#comments</comments>
		<pubDate>Tue, 05 May 2009 20:54:56 +0000</pubDate>
		<dc:creator>Tales</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[ProgressBar]]></category>
		<category><![CDATA[Upload]]></category>

		<guid isPermaLink="false">http://www.talesaugusto.com.br/?p=54</guid>
		<description><![CDATA[Neste post irei mostrar como fazer uma barra de progresso nos formulário que possuem upload. A teoria da operação é a seguinte: Utilizaremos dois actions &#8220;processAction&#8221; e &#8220;progressAction&#8221;. O 1° irá fazer o processamento do formulário (nada fora do normal até aqui  . Mas a mágica acontece no action &#8220;progressAction&#8221; que envia para o [...]]]></description>
			<content:encoded><![CDATA[<p>Neste post irei mostrar como fazer uma barra de progresso nos formulário que possuem upload. A teoria da operação é a seguinte: Utilizaremos dois actions &#8220;processAction&#8221; e &#8220;progressAction&#8221;. O 1° irá fazer o processamento do formulário (nada fora do normal até aqui <img src='http://www.talesaugusto.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Mas a mágica acontece no action &#8220;progressAction&#8221; que envia para o browser como está o progresso do upload. Quando envia o formulário, um javascript faz requisições para &#8220;progressAction&#8221; via ajax e este retorna as informações necessárias para fazer a barra de progresso funcionar.<br />
Para este tutorial, é necessário a extensão uploadprogress. Esta extensão que permite ao php recuperar o status do envio. Segue o link para o download da extensão:</p>
<ul>
<li><a title="Para Windows" href="http://www.iwid.co.uk/e107_files/downloads/php_uploadprogress_dll_WIN32.zip" target="_blank">php_uploadprogress_dll_WIN32.zip</a></li>
<li><a href="http://pecl.php.net/get/uploadprogress-1.0.0.tgz" target="_blank">uploadprogress-1.0.0.tgz</a></li>
</ul>
<p><span id="more-54"></span>A extensão precisa acessar a pasta de uploads temporária, portanto é necessário configurar no php.ini o caminho. Inclua as seguintes linhas no seu arquivo de configurações do php:</p>
<pre class="brush: php;">

[UploadProgress]

extension=php_uploadprogress.dll
uploadprogress.file.contents_template=&quot;C:WINDOWSTempupload_contents_%s&quot;
uploadprogress.file.filename_template=&quot;C:WINDOWSTempupt_%s.txt&quot;
</pre>
<p>Obs: Reparem para a última parte dos caminhos que devem ser mantidos (&#8220;upload_contents_%s&#8221; e &#8220;upt_%s.tx&#8221;)</p>
<p>Obs2: Sei que não é a melhor opção, mas estou fazendo o tutorial baseado em ambiente Windows. Mas os passos são os mesmos para ambiente Unix.</p>
<p>Segue o controller que fará todo o controle do upload:</p>
<pre class="brush: php;">

class IndexController extends Zend_Controller_Action
{
/**
* Monta o formulário
*
* @return void
*/
public function indexAction()
{
$request = $this-&gt;getRequest();
$this-&gt;view-&gt;id = md5(microtime() . rand());
}

/**
* Processo os arquivos quando forem finalizados
*
* @return void
*/
public function processAction()
{
Zend_Layout::getMvcInstance()-&gt;disableLayout();
$this-&gt;_helper-&gt;viewRenderer-&gt;setNoRender();

Zend_Debug::dump($_FILES);
Zend_Debug::dump($_POST);

}

/**
* Retorna o json com as informações do progresso do upload.
*
* @return void
*/
public function processInfoAction()
{
Zend_Layout::getMvcInstance()-&gt;disableLayout();
$this-&gt;_helper-&gt;viewRenderer-&gt;setNoRender();

$id = $this-&gt;_getParam('id');
echo Zend_Json::encode(uploadprogress_get_info($id));
}
}
</pre>
<p><strong>indexAction </strong>apenas renderiza o formulário passando o ID do post. É por este ID que a extensão saberá identificar de qual upload deve ser retornado as informações.</p>
<p><strong>processAction</strong> apenas recebe os arquivos e ecoa na tela as informações.</p>
<p><strong>processInfoAction </strong>recebe o ID do upload e retorna o json necessário para o javascript fazer a barra de progresso.</p>
<p>Este é o HTML montado para o upload. Notem que é obrigatório o campo hidden com o identificador gerado no indexAction.</p>
<pre class="brush: xml;">

&lt;form action=&quot;&lt;?= $this-&gt;url(array('action'=&gt;'process')) ?&gt;&quot; id=&quot;frmUpload&quot; enctype=&quot;multipart/form-data&quot; method=&quot;post&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;UPLOAD_IDENTIFIER&quot; value=&quot;&lt;?= $this-&gt;id; ?&gt;&quot; id=&quot;UPLOAD_IDENTIFIER&quot;/&gt;

&lt;label&gt;Select File:&lt;/label&gt;
&lt;input type=&quot;file&quot; name=&quot;file&quot; style=&quot;display:block&quot; /&gt;

&lt;input type=&quot;submit&quot; value=&quot;ok&quot; /&gt;
&lt;/form&gt;
&lt;div id=&quot;uploadprogressbar&quot;&gt;&lt;/div&gt;
</pre>
<p>A div identificada por &#8220;uploadprogressbar&#8221; é onde o será feita a barra de progresso.</p>
<p>O que resta agora é somente o javascript. Para a barra de progresso é necessário o <a title="Core jQuery" href="http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3.2.min.js&amp;downloadBtn=" target="_blank">jQuery </a>e o plugin <a title="Plugin ProgressBar" href="http://t.wits.sg/2008/06/20/jquery-progress-bar-11/" target="_blank">jQuery ProgressBar</a>.</p>
<p>Inclua o seguinte código JS no header da página que terá o formulário.</p>
<pre class="brush: jscript;">

&lt;script type=&quot;text/javascript&quot;&gt;
var progress_key;

$(document).ready(function() {
progress_key = $(&quot;#UPLOAD_IDENTIFIER&quot;).val();
$(&quot;#frmUpload&quot;).bind(&quot;submit&quot;, function() {
beginUpload();
});
$(&quot;#uploadprogressbar&quot;).progressBar();
});

function beginUpload() {
$(&quot;#uploadprogressbar&quot;).fadeIn();
setTimeout(&quot;showUpload()&quot;, 100);
}

function showUpload() {
$.get(&quot;&lt;?= $this-&gt;url(array('action'=&gt;'process.info')); ?&gt;/id/&quot; + progress_key, function(data) {
if (!data)
return;

var response;
eval (&quot;response = &quot; + data);

if (!response)
return;

var percentage = Math.floor(100 * parseInt(response['bytes_uploaded']) / parseInt(response['bytes_total']));
$(&quot;#uploadprogressbar&quot;).progressBar(percentage);

});
setTimeout(&quot;showUpload()&quot;, 100);
}
&lt;/script&gt;
</pre>
<p>Feito isso, é só testar e ver o resultado.  <img src='http://www.talesaugusto.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Para mais informações do plugin ProgressBar acesse o <a href="http://t.wits.sg/2008/06/20/jquery-progress-bar-11/" target="_blank">site </a>do mesmo.</p>
<p>Qualquer dúvida entre em contato que farei o possível para ajudar.</p>
<p>Abraços!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.talesaugusto.com.br/zend-framework-upload-progressbar/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
