W3C home > Mailing lists > Public > www-jigsaw@w3.org > March to April 1999

jigsaw 2.0.2 bug in servlet API !?

From: Roland Mainz <Roland.Mainz@informatik.med.uni-giessen.de>
Date: Mon, 05 Apr 1999 19:11:44 +0200
Message-Id: <3708EED0.76D113AD@informatik.med.uni-giessen.de>
To: "jigsaw@w3.org" <jigsaw@w3.org>, W3 Jigsaw Mailinglist <www-jigsaw@w3.org>, Yves Lafon <ylafon@w3.org>, Benoit Mahe <Benoit.Mahe@sophia.inria.fr>

Hi !

----

The following code does NOT work, and the question is: WHY ?
The file downloaded by the browser is different in size from the
original file,and ZIP
files are not recogzized as such by WinZip 7.0 (reg).
(Method d( String ) is only a logging function).

di.filename       ="dk-lite.zip";
di.contenttype = "application/octet-stream";

It doesn't matter if I use a BufferedINputStream instead of the plane
FileInputStream
as input, and it doesn't matter to move getOutputStream behind the
setContentType
method call...
It doesn't matter to use the int-copy-loop below, or the 256-byte copy
loop which is
commented-out here.

Hint to Yvves/Benoit: This may be a problem with charset-conversion,
e.g. that
application/octet-stream contents are converted by jigsaw's
SetvletOutputStream in a case
where no conversion should be done.

Last but not least my code may be buggy - in this case - sorry.

-- snip --
    private void putFile( DownloadItem di, HttpServletResponse res )
throws IOException
    {
        d( "sending '" + di.filename + "' (" + di.contenttype + ")" );

        // get source
        // InputStream         in  = new FileInputStream( di.filename );

        InputStream  in  = new BufferedInputStream( new FileInputStream(
di.filename ) );
        OutputStream out = res.getOutputStream();

        // prepare and get destination
        res.setContentType(   di.contenttype   );
        res.setContentLength( (int)di.filesize ); /* seems that here
sits a possible problem for files >= 2 GB... */

        int i;
        while ((i = in.read()) != -1)
        {
          out.flush();
          out.write( i );
        }

        int  readlen,
             sentsize = 0;
/*
        byte buffer[] = new byte[ 256 ];

        // loop until EOF
        while( (readlen = in.read( buffer )) != -1 )
        {
          // throws IOException: broken pipe when download is canceled.
          out.flush();
          out.write( buffer, 0, readlen );
          sentsize += readlen;
        }

        // Success ! Close streams.
*/
        out.flush();
        out.close();

        in.close();

        d( "transfer of " + di.filename + " (" + di.filesize + "/" +
sentsize +  ") done." );
    }
}

-- snip --

--
  __ .  . __
 (o.\ \/ /.o)  Roland Mainz                               C programmer
  \__\/\/__/   Roland.Mainz@informatik.med.uni-giessen.de MPEG specialist
  /O /==\ O\   gisburn@w-specht.rhein-ruhr.de             Sun&&Amiga programmer
 (;O/ \/ \O;)  TEL +49 (0) 2426901568  FAX +49 (0) 2426901569
Received on Monday, 5 April 1999 13:10:51 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 9 April 2012 12:13:29 GMT