<?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>Lucas Teixeira &#187; content disposition</title>
	<atom:link href="http://lucastex.com.br/tag/content-disposition/feed/" rel="self" type="application/rss+xml" />
	<link>http://lucastex.com.br</link>
	<description>@lucastex</description>
	<lastBuildDate>Fri, 07 Jan 2011 12:44:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Devolvendo um texto como attachment no response</title>
		<link>http://lucastex.com.br/2010/01/27/devolvendo-um-texto-como-attachment-no-response/</link>
		<comments>http://lucastex.com.br/2010/01/27/devolvendo-um-texto-como-attachment-no-response/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 12:48:52 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[attachment]]></category>
		<category><![CDATA[content disposition]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[render]]></category>
		<category><![CDATA[response]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=271</guid>
		<description><![CDATA[

Me deparei com a seguinte situação em uma aplicação construída usando Grails.
O sistema gravaria o conteúdo de um arquivo (plain xml mesmo) dentro do banco de dados, para evitar dependências com filesystem. Mas este arquivo também precisaria ser lido posteriormente. A solução que estava disponível, era alguma coisa mais ou menos assim:
def arquivo = Arquivo.get(params.id) [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Flucastex.com.br%252F2010%252F01%252F27%252Fdevolvendo-um-texto-como-attachment-no-response%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FdDzmT5%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Devolvendo%20um%20texto%20como%20attachment%20no%20response%22%20%7D);"></div>
<p>Me deparei com a seguinte situação em uma aplicação construída usando Grails.</p>
<p>O sistema gravaria o conteúdo de um arquivo (plain xml mesmo) dentro do banco de dados, para evitar dependências com filesystem. Mas este arquivo também precisaria ser lido posteriormente. A solução que estava disponível, era alguma coisa mais ou menos assim:</p>
<pre class="brush: groovy; title: ;">def arquivo = Arquivo.get(params.id) //recupera o arquivo da base
render arquivo.texto</pre>
<p>Legal, desta maneira (bem simples até), o conteúdo deste texto seria renderizado na página para o usuário poder salvá-la.</p>
<p>Imaginei que isto pudesse ser incrementado um pouco, e percebi que fazer com que o usuário tivesse que salvar a página (que continha apenas o XML) poderia se tornar um tanto chato com o passar do tempo. Resolvi alterar a action para devolver o texto em anexo ao response. Isso mesmo, com a caixinha para poder salvá-lo.</p>
<p>Olha que simples:</p>
<pre class="brush: groovy; title: ;">def arquivo = Arquivo.get(params.id) //recupera o arquivo da base
response.setContentType &quot;text/xml&quot;
response.setHeader &quot;Content-Disposition&quot;, &quot;attachment;filename=\&quot;${arquivo.nome}.xml\&quot;&quot;
response &lt;&lt; arquivo.texto</pre>
<p>Simples, colocando a instrução no header para que a &#8220;disposição&#8221; da resposta seja &#8220;attachment&#8221; (anexo), o browser ao invés de renderizar apenas o conteudo, retorna um arquivo com este texto.</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/01/27/devolvendo-um-texto-como-attachment-no-response/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

