<?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>JulioGreff.net &#187; upload</title>
	<atom:link href="http://juliogreff.net/tag/upload/feed/" rel="self" type="application/rss+xml" />
	<link>http://juliogreff.net</link>
	<description>A mesma web, um novo estilo de desenvolvimento</description>
	<lastBuildDate>Sat, 07 May 2011 17:07:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Upload Assíncrono de Arquivos com Mootools</title>
		<link>http://juliogreff.net/upload-assincrono-de-arquivos-com-mootools/</link>
		<comments>http://juliogreff.net/upload-assincrono-de-arquivos-com-mootools/#comments</comments>
		<pubDate>Thu, 08 May 2008 15:21:47 +0000</pubDate>
		<dc:creator>Julio Greff</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[bibliotecas]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[upload]]></category>

		<guid isPermaLink="false">http://juliogreff.blog.br/?p=140</guid>
		<description><![CDATA[Como todos sabem, Upload com Ajax não é praticável em ambiente web. Existem várias restrições de segurança que impedem que o JavaScript acesse o sistema de arquivos do cliente e envie dados binários através de uma requisição XMLHttpRequest. No entanto, é possível (e sempre foi) fazer Upload Assíncrono de arquivos, utilizando uma técnica até antiga, [...]

<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/ajax-com-a-mootools/' rel='bookmark' title='Permanent Link: Ajax com a Mootools'>Ajax com a Mootools</a></li>
<li><a href='http://juliogreff.net/mootools-eventos/' rel='bookmark' title='Permanent Link: Mootools &#8211; Eventos'>Mootools &#8211; Eventos</a></li>
<li><a href='http://juliogreff.net/mootools-chain/' rel='bookmark' title='Permanent Link: Mootools &#8211; Chain'>Mootools &#8211; Chain</a></li>
<li><a href='http://juliogreff.net/mootools-classes/' rel='bookmark' title='Permanent Link: Mootools &#8211; Classes'>Mootools &#8211; Classes</a></li>
<li><a href='http://juliogreff.net/mootools-menu-sanfona/' rel='bookmark' title='Permanent Link: Mootools &#8211; Menu Sanfona'>Mootools &#8211; Menu Sanfona</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Como todos sabem, <strong>Upload com Ajax</strong> não é praticável em ambiente web. Existem várias restrições de segurança que impedem que o JavaScript acesse o sistema de arquivos do cliente e envie dados binários através de uma requisição XMLHttpRequest. No entanto, é possível (e sempre foi) fazer <strong>Upload Assíncrono</strong> de arquivos, utilizando uma técnica até antiga, muito bem explorada por <a href="http://www.elmicox.com/2007/upload-assincrono-iframe-como-ajax-1-funcao-simples/" title="Upload Assíncrono - El Micox" rel="external friend">muitos</a> por aí.</p>
<p>Já havia tempo que eu queria escrever esse script, mas a coragem faltava, até que ele me foi necessário. Como uso <a href="http://mootools.net" title="Mootools - Lightweight JavaScript Framework" rel="external">Mootools</a>, não faria sentido usar funções autônomas, desperdiçando código. Então tomei coragem e fiz. Pronto, nem doeu&#8230;</p>
<h3>O Código</h3>
<p>Meu objetivo, nesse post, não é explicar a <strong>lógica</strong> por trás do script (farei isso em breve), mas sim deixar o <strong>código pronto</strong>, e explicar seu uso.</p>
<p class="left"><a href="http://juliogreff.net/scripts/async-upload/asyncUpload.js" title="Async Upload - Upload Assíncrono de Arquivos"><img src="http://juliogreff.net/wp-uploads/download-script.png" title="Download Async Upload" alt="Download Async Upload" /></a></p>
<p>Antes de tudo, você precisará da <a href="http://mootools.net/download/" title="Mootools - Lightweight JavaScript Framework" rel="external">Mootools</a> com os módulos necessários, o que suponho que você já possua. Depois, faça o download do <a href="http://juliogreff.net/scripts/async-upload/asyncUpload.js" title="Async Upload - Upload Assíncrono de Arquivos">Async Upload</a>. Agora, basta incluir os dois scripts em sua página.</p>
<pre><code>&lt;script type="text/javascript" src="mootools.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="asyncUpload.js"&gt;&lt;/script&gt;</code></pre>
<h3>Utilização</h3>
<p>Como não podia deixar de ser, o script funciona na submissão de um formulário. Ele a intercepta e a envia para um iframe escondido. Pra que tudo isso funcione, temos que definir isso no <code>onSubmit</code> de nosso formulário:</p>
<pre><code>$(window).addEvent("load", function() { // quando terminar de carregar...
  $("seu-formulario").addEvent("submit", function() { // e o nosso formulário for enviado...
    this.upload() // fazemos nosso upload, parecido (mas não é) com Ajax
  })
}</code></pre>
<h3>E cadê a URL?</h3>
<p>Como a Mootools nos dá muitas opções para trabalhar com DOM, não precisamos definir a URL no script. Essa URL vai ser retirada do próprio formulário, no <code>action</code>:</p>
<pre><code>&lt;form action="http://sua-url-para-envio/upload.php" id="seu-formulario"&gt;
  &lt;input type="file" name="fileToUpload" id="fileToUpload" /&gt;
&lt;/form&gt;</code></pre>
<h3>Elemento de Retorno</h3>
<p>Muito melhor do que elementos de retorno, podemos definir uma <strong>função</strong> para tratar o retorno do upload. Para isso, passamos um parâmetro para a função:</p>
<pre><code>$(window).addEvent("load", function() {
  $("seu-formulario").addEvent("submit", function() {
    this.upload({
      "onComplete": function(response) {
        $("elemento_de_retorno").setHTML(response)
      }
    })
  })
}</code></pre>
<p>Com o código acima, o resultado da requisição iria para uma div (ou algum outro elemento) de id &#8220;elemento_de_retorno&#8221;. É claro, pode-se fazer muito mais, mas fica a seu cargo decidir&#8230;</p>
<h3>Recebendo o Arquivo</h3>
<p>Apesar de assíncrono (ou Ajax disfarçado), esse upload funciona como um upload comum. No PHP, por exemplo, podemos receber o arquivo assim:</p>
<pre><code>move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], "nome_do_arquivo.txt");</code></pre>
<h3>Exemplo e Download</h3>
<p>Caso queira dar uma olhada, <a href="http://juliogreff.net/scripts/async-upload/" title="Async Upload - Upload Assíncrono de Arquivos">deixei um exemplo na página de downloads</a>. Faça upload de um arquivo qualquer e veja o funcionamento! Caso deseje saber a lógica por trás de tudo isso, aguarde os próximos posts. Até mais!</p>


<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/ajax-com-a-mootools/' rel='bookmark' title='Permanent Link: Ajax com a Mootools'>Ajax com a Mootools</a></li>
<li><a href='http://juliogreff.net/mootools-eventos/' rel='bookmark' title='Permanent Link: Mootools &#8211; Eventos'>Mootools &#8211; Eventos</a></li>
<li><a href='http://juliogreff.net/mootools-chain/' rel='bookmark' title='Permanent Link: Mootools &#8211; Chain'>Mootools &#8211; Chain</a></li>
<li><a href='http://juliogreff.net/mootools-classes/' rel='bookmark' title='Permanent Link: Mootools &#8211; Classes'>Mootools &#8211; Classes</a></li>
<li><a href='http://juliogreff.net/mootools-menu-sanfona/' rel='bookmark' title='Permanent Link: Mootools &#8211; Menu Sanfona'>Mootools &#8211; Menu Sanfona</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://juliogreff.net/upload-assincrono-de-arquivos-com-mootools/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>

