You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Robert Shields <rs...@star.net.uk> on 2004/07/15 11:22:41 UTC

calling request.getInputStream() within Action

Hi Struts Users

I'm trying to get the InputStream to read the binary contents of the
request within an Action's execute method. E.g.



public ActionForward execute(
		ActionMapping mapping,
		ActionForm form,
		HttpServletRequest request,
		HttpServletResponse response)
		throws IOException, ServletException {

	InputStream inputStream = request.getInputStream();

	// bytesAvailable is always 0
	int bytesAvailable = inputStream.available();

	int bytesRead;
	byte[] buf = new byte[1024];
	while((bytesRead = inputStream.read(buf)) != -1)
	{
		// do stuff
	}
}

So bytesAvailable is always 0, and inputStream.read(buf) immediately
returns -1.

I have heard that calling request.getParamter() before trying to access
the input stream can affect accessing the input stream. I believe struts
calls request.getParamter (it must do to populate the form bean).

My question is, how can I get access to the entire binary contents of
the HTTP body?

I'm using Tomcat 5.0.25 BTW

TIA
Rob


This e-mail has been scanned for all viruses by Star Internet. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk
_____________________________________________________________________

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: calling request.getInputStream() within Action

Posted by Bill Siggelkow <bi...@bellsouth.net>.
Robert, I found the following link that discusses this:

http://archives.java.sun.com/cgi-bin/wa?A2=ind0106&L=jsp-interest&F=&S=&P=49196

It sounds like you are correct -- if request.getParameter() has been 
called you cannot get the input stream -- have you considered using a 
Servlet instead?

Robert Shields wrote:

> Hi Struts Users
> 
> I'm trying to get the InputStream to read the binary contents of the
> request within an Action's execute method. E.g.
> 
> 
> 
> public ActionForward execute(
> 		ActionMapping mapping,
> 		ActionForm form,
> 		HttpServletRequest request,
> 		HttpServletResponse response)
> 		throws IOException, ServletException {
> 
> 	InputStream inputStream = request.getInputStream();
> 
> 	// bytesAvailable is always 0
> 	int bytesAvailable = inputStream.available();
> 
> 	int bytesRead;
> 	byte[] buf = new byte[1024];
> 	while((bytesRead = inputStream.read(buf)) != -1)
> 	{
> 		// do stuff
> 	}
> }
> 
> So bytesAvailable is always 0, and inputStream.read(buf) immediately
> returns -1.
> 
> I have heard that calling request.getParamter() before trying to access
> the input stream can affect accessing the input stream. I believe struts
> calls request.getParamter (it must do to populate the form bean).
> 
> My question is, how can I get access to the entire binary contents of
> the HTTP body?
> 
> I'm using Tomcat 5.0.25 BTW
> 
> TIA
> Rob
> 
> 
> This e-mail has been scanned for all viruses by Star Internet. The
> service is powered by MessageLabs. For more information on a proactive
> anti-virus service working around the clock, around the globe, visit:
> http://www.star.net.uk
> _____________________________________________________________________


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org