You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Hsin-Tang Pai <hp...@psi-it.com> on 2007/01/11 23:56:21 UTC
download/export a file: to reset response buffer: Committed
Hi,
I tried to a EngineService to download/export a file
(application/octet-stream).
Because THE file is from FTP site, I cannot get actual link form
getLink() method.
So I tried to do directly download as following:
Call Page:
@InjectPage("DownloadOutput")
public abstract DownloadOutput getDownloadOutput();
public void CallPage(IRequestCycle cycle) {
DownloadOutput results = getDownloadOutput();
results.activate(fileInputStream, file.getName(),
(int)file.length());
}
DownloadOutput page:
public void activate(FileInputStream fis, String fileName, int
fileLength)
FileInputStream fis = new FileInputStream(file);
in = new BufferedInputStream(fis);
WebResponse response =
getPage().getRequestCycle().getInfrastructure().getResponse();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int c;
while ( ( c = fis.read() ) != -1 ) {
baos.write( c );
}
fis.close();
outputStrem = response.getOutputStream(new
ContentType("application/octet-stream"));
response.setDateHeader("max-age", 0);
response.setHeader("Content-transfer-encoding", "binary");
response.setHeader("Content-disposition", "attachment; filename="
+ fileName);
response.setContentLength(fileLength);
response.setHeader("Connection", "keep-alive");
response.setHeader("Expires", "600000");
response.setHeader("Cache-Control", "public, post-check=0,
pre-check=0");
outputStrem.write(baos.toByteArray());
outputStrem.flush();
outputStrem.close();
in.close();
in = null;
getRequestCycle().activate(this);
}
And I got Error:
[java] 17:24:38,888 ERROR ServletWebResponse:132 - Unable to reset
response buffer: Committed
[java] java.lang.IllegalStateException: Committed
[java] at
org.mortbay.jetty.servlet.ServletHttpResponse.resetBuffer(ServletHttpRes
ponse.jav
a:212)
[java] at
org.mortbay.jetty.servlet.ServletHttpResponse.reset(ServletHttpResponse.
java:221)
[java] at
org.apache.tapestry.web.ServletWebResponse.reset(ServletWebResponse.java
:128)
[java] at
org.apache.tapestry.web.ServletWebResponse.getPrintWriter(ServletWebResp
onse.java
:90)
[java] at
$WebResponse_1100e16f32a.getPrintWriter($WebResponse_1100e16f32a.java)
[java] at
$WebResponse_1100e16f1fe.getPrintWriter($WebResponse_1100e16f1fe.java)
[java] at
org.apache.tapestry.services.impl.ResponseRendererImpl.renderResponse(Re
sponseRen
dererImpl.java:67)
[java] at
$ResponseRenderer_1100e16f21a.renderResponse($ResponseRenderer_1100e16f2
1a.java)
[java] at
org.apache.tapestry.error.ExceptionPresenterImpl.presentException(Except
ionPresen
terImpl.java:46)
[java] at
$ExceptionPresenter_1100e16f208.presentException($ExceptionPresenter_110
0e16f208.
java)
[java] at
org.apache.tapestry.engine.AbstractEngine.activateExceptionPage(Abstract
Engine.ja
va:121)
[java] at
org.apache.tapestry.engine.AbstractEngine.service(AbstractEngine.java:28
0)
[java] at
org.apache.tapestry.services.impl.InvokeEngineTerminator.service(InvokeE
ngineTerm
inator.java:60)
[java] at
$WebRequestServicer_1100e16f262.service($WebRequestServicer_1100e16f262.
java)
[java] at
org.apache.tapestry.services.impl.DisableCachingFilter.service(DisableCa
chingFilt
er.java:4Cool
[java] at
$WebRequestServicerFilter_1100e16f264.service($WebRequestServicerFilter_
1100e16f2
64.java)
[java] at
$WebRequestServicer_1100e16f266.service($WebRequestServicer_1100e16f266.
java)
[java] at
$WebRequestServicer_1100e16f25e.service($WebRequestServicer_1100e16f25e.
java)...
I cannot find any support documents on the web. I even don't know what
if that mean.
Please Help....
Thank you very much