erro ao cancelar download
14/04/2010 00:00
1
Olá,

eu tenho um metodo de download de arquivo que está funcionando corretamente, mas quando vc clica pra fazer o download e abre a tela para Abrir, Salvar ou Cancelar, se eu clico em Cancelar, ele cancela, mas joga um erro no console:

segue o metodo, eu já usei todos esses outros output q estao comentados, mas persiste o erro ao cancelar.


// download de slides
def downloadFile = {
def file = new File( 'web-app/material/' + params.nome )
response.setHeader("Content-Type", "application/octet-stream;")
response.setHeader("Content-Disposition", "attachment;filename=\" ${params.nome}\"")
response.setHeader("Content-Length", "${file.size()}")
//file.withInputStream { response.outputStream << it }
response.outputStream << file.newInputStream()
// response.outputStream << file.text
// response.outputStream << file.text.bytes
}


aqui um pedaço do erro:


2010-04-14 11&#58;48&#58;45,753 [http-8080-1] ERROR StackTrace - Sanitizing stacktrace&#58;
ClientAbortException&#58; java.net.SocketException&#58; Connection reset by peer&#58; socket write error
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java&#58;358)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java&#58;434)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java&#58;349)
at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java&#58;381)
at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java&#58;370)
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java&#58;89)
at com.opensymphony.module.sitemesh.filter.RoutableServletOutputStream.write(RoutableServletOutputStream.java&#58;118)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.leftShift(DefaultGroovyMethods.java&#58;5746)
at org.codehaus.groovy.runtime.dgm$337.invoke(Unknown Source)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java&#58;270)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java&#58;52)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java&#58;40)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java&#58;117)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java&#58;125)
at AnimadorController$_closure15.doCall(AnimadorController.groovy&#58;185)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java&#58;39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java&#58;25)
at java.lang.reflect.Method.invoke(Method.java&#58;597)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSite.invoke(PogoMetaMethodSite.java&#58;225)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java&#58;51)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java&#58;44)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java&#58;143)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java&#58;151)
at AnimadorController$_closure15.doCall(AnimadorController.groovy)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java&#58;39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java&#58;25)
at java.lang.reflect.Method.invoke(Method.java&#58;597)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java&#58;86)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java&#58;234)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java&#58;1049)
at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java&#58;923)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java&#58;880)
at groovy.lang.Closure.call(Closure.java&#58;279)
at groovy.lang.Closure.call(Closure.java&#58;274)


alguém tem uma sugestão?

valeu, abraco
Tags: Grails


1
Opa,

neste caso não há muito o que ser feito. No máximo você pode tratar esta excessão no seu código evitando assim que alguma mensagem de erro seja enviada ao cliente, ou mesmo dar uma resposta mais interessante pro usuário.


1
olá kico,

valeu pela dica, acho q funcionou aqui. o código ficou assim:


def downloadFile = {
def file = new File( 'web-app/material/' + params.nome )
try {
response.setHeader(&quot;Content-Type&quot;, &quot;application/octet-stream;&quot;)
response.setHeader(&quot;Content-Disposition&quot;, &quot;attachment;filename=\&quot; ${params.nome}\&quot;&quot;)
response.setHeader(&quot;Content-Length&quot;, &quot;${file.size()}&quot;)
response.outputStream << file.newInputStream()
} catch(org.apache.catalina.connector.ClientAbortException e) {
println &quot;Usuario cancelou o download.&quot;
} finally {
println &quot;Download encerrado.&quot;
}
}


obrigado
15/04/2010 00:00



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto