Salve a tutti,
ho una servlet che servirebbe a leggere da un campo blob di un db oracle (su cui precedentemente viene salvato un file). Da questo blob viene estratto un InputStream e poi viene scritto sull'OutputStream della response http in modo da permettere al browser di scaricare il file.
Però, non capisco perché il file che viene generato è vuoto.


Un esempio di blob memorizzato a db è il seguente:

2d2d2d205363726970742070657220637265617a696f6e6520 746162656c6c6120666973696361202d2d2d0d0a4352454154 45205441424c4520746573745f626c6f625f66696c650d0a28 0d0a0975706c6f61645f69640909494e54454745520909094e 4f54204e554c4c2c0d0a202020200966696c655f6e616d6509 0956415243484152322831323820425954452920202020094e 4f54204e554c4c2c0d0a20200966696c655f64617461090942 4c4f42202020202020202020202020202020094e4f54204e55 4c4c2c0d0a0d0a09434f4e53545241494e5420506b5f546573 745f426c6f625f46696c65205052494d415259204b45592028 75706c6f61645f6964290d0a29


Questo è il codice della servlet:

codice:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //get upload id from URL's parameters
        int uploadId = Integer.parseInt(request.getParameter("id"));
         
        Connection conn = null; // connection to the database
         
        try {
            //connects to the database
            conn = OracleJDBCConn.creaConnessione();
 
            //queries the database
            String sql = "SELECT * FROM test_blob_file WHERE upload_id = ?";
            PreparedStatement statement = conn.prepareStatement(sql);
            statement.setInt(1, uploadId);
 
            ResultSet result = statement.executeQuery();
            if (result.next()) {
                // gets file name and file blob data
                String fileName 		= result.getString("file_name");
                Blob blob 				= result.getBlob("file_data");
                InputStream inputStream = blob.getBinaryStream();
                int fileLength 			= inputStream.available();
                 
                System.out.println("fileLength = " + fileLength);
 
                ServletContext context = getServletContext();
 
                // sets MIME type for the file download
                String mimeType = context.getMimeType(fileName + ".txt");
                if (mimeType == null) {        
                    mimeType = "application/octet-stream";
                }              
                 
                // set content properties and header attributes for the response
                response.setContentType(mimeType);
                response.setContentLength(fileLength);
                String headerKey = "Content-Disposition";
                String headerValue = String.format("attachment; filename=\"%s\"", fileName + ".txt");
                response.setHeader(headerKey, headerValue);
 
                // writes the file to the client
                OutputStream outStream = response.getOutputStream();
                 
                byte[] buffer 	= new byte[BUFFER_SIZE];
                int bytesRead 	= -1;
                int offset		= 0; 
                
                while ((bytesRead = inputStream.read(buffer)) != -1) {
                	outStream.write(buffer, offset, bytesRead);
                	//offset += BUFFER_SIZE;
                }
                 
                inputStream.close();
                outStream.close();             
            } else {
                // no file found
                response.getWriter().print("File not found for the id: " + uploadId);  
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
            response.getWriter().print("SQL Error: " + ex.getMessage());
        } catch (IOException ex) {
            ex.printStackTrace();
            response.getWriter().print("IO Error: " + ex.getMessage());
        } finally {
            if (conn != null) {
                // closes the database connection
                try {
                    conn.close();
                } catch (SQLException ex) {
                    ex.printStackTrace();
                }
            }          
        }
    }

Qualche suggerimento ?

Grazie dell'attenzione