See below...

On Wed, 2003-07-09 at 15:10, Michael Wille wrote:
> Hello All,
> 
> I am experiencing a very strange problem and don't know exactly how to fix it.  The 
> problem is garbled junk characters are being prepended to the response output stream 
> that the browser receives.  This only happens for Internet Explorer and it seems 
> very random.  It is very difficult to reproduce.  I've never seen it happen under 
> Mozilla.
> 
> Before I launch into my questions, let me explain our setup.
> 
> We have Tomcat 4.1.12 behind Apache 1.3.27.  Running on tomcat is a custom 
> application.  Part of what it does is maintain a library of digital assets.  These 
> assets can be movies, pdfs, images, etc.  When browsing the library of assets, you 
> have several options: view thumbnail, view fullsize, download, etc.  While all 
> static images used in the web pages are served up by Apache, all of these assets are 
> served by a special 'proxy' servlet in tomcat.  This is done primarily for security. 
>  All access to this restricted material is monitored via this proxy servlet.
> 
> The code for the proxy is basically:
> 
> File file = new File(filePath);
> FileInputStream fis = new FileInputStream(file);
> ServletOutputStream outStream = response.getOutputStream();
> long fileLength = file.length();
>    
> response.setContentLength((int) fileLength);
> response.addHeader("Pragma", "no-cache");
>    
> if(action.equals("download")) {
>     // We need to set the attachment header that only some browsers listen to. (the 
> good ones)
>     response.setHeader("Content-Disposition","attachment; filename=" + fileName + 
> ";");
>     // Then because some browsers don't follow standards (IE) we have to set the 
> mime type as a bogus value
>     response.setContentType("doner/x-fileshare-native");
> } else {
>     // if we are just viewing, let the browser know the correct mime type.
>     response.setContentType(asset.getMimeType());
> }
> 
> byte[] buffer = new byte[1024];
> int numBytes = 0;
> int totalBytes = 0;
> while(totalBytes < fileLength) {
>     numBytes = fis.read(buffer);
>     totalBytes += numBytes;
>     outStream.write(buffer);
> } 

You don't want to write the whole buffer, just what was read. Try write(
buffer, 0, numBytes )

> fis.read(buffer);
> fis.close();
> 
> The reason I post this code is because I believe that the garbled junk is the 
> remains of an aborted file download.  My guess is that sometime during the while 
> loop that writes the contents of the file to the stream, the user opened another 
> page (possibly without the browser closing the connection?).  This problem is 
> reproducible (though not very easily) when a large file is opened for viewing or 
> download.   While the transfer is occuring, click on another link.  1 out of 3 times 
> you see the garbled junk.  Sometimes it happens more often, sometimes less.
> 
> So, am I going off in the wrong direction with this?  If not, is there anyway to 
> check to see if the connection was closed or aborted during servlet processing?  
> Does anyone have any ideas or thoughts about this?
> 
> Thanks for any help!
> 
> -Mike
-- 
Bill Connor <[EMAIL PROTECTED]>


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to