Thank you for your reply

Glenn, if i return null, where will the action forward to?
Actually I have'nt copied the total class to you, i did return. Let me
show you the file.

Could you please tell me if you are comforatable that I attach my
files intead of pasting the whole content?I  think that will be easy
for you to look also.

package com.nimaya.intranet.action;

import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.File;
import java.util.ArrayList;
                                
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.beanutils.BeanUtils;


import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.nimaya.intranet.util.Constant;
import com.nimaya.intranet.util.IntranetLogger;
import com.nimaya.intranet.filter.IntranetUser;
import com.nimaya.intranet.action.ReportGenerateForm;
import com.nimaya.intranet.exception.BusinessDelegateException;
import com.nimaya.intranet.dto.ReportGenerateDTO;
import com.nimaya.intranet.delegate.*;
import com.nimaya.intranet.exception.*;
import com.nimaya.intranet.dto.ProjectsListDTO;
import com.nimaya.intranet.util.FileUpload;
import com.nimaya.intranet.util.LabelValueBean;
                                
                                
public class DownloadReportAction extends IntranetBaseAction {                  
        

        public ActionForward executeAction( ActionMapping mapping,
                                               ActionForm form,
                                               HttpServletRequest request,
                                               HttpServletResponse response
                                              ) throws
BusinessDelegateException,IOException
        {       
                ReportGenerateForm rform = (ReportGenerateForm) form ;
                ActionForward forward = 
mapping.findForward(Constant.DOWNLOAD_REPORT);
                ReportGenerateDelegate  reportGenerateDelegate = new 
ReportGenerateDelegate();
                
                int empId = getIntranetUser( request ).getEmployeeID();
                String reportId = request.getParameter("rid");
                String companyId = 
String.valueOf(getIntranetUser(request).getCompanyId());
                String companyName = getIntranetUser(request).getCompanyName();
                String projectId = Constant.STRING_ZERO;
                String projectName = Constant.BLANK;

                String fn = reportGenerateDelegate.getFileName(reportId);

                //prepend employee Id to file Name
                StringBuffer file = new StringBuffer(String.valueOf(empId));
                file.append(Constant.FILENAME_SEPERATOR_LITERAL).append(fn);
                String fileName = new String(file);

                 // scrub the company name
                 ArrayList arr = new ArrayList();
                 arr.add(companyName);
                 arr = (ArrayList)rform.validateData( arr ) ;
                 String scrubbedCompanyName = (String)arr.get(0);
                 IntranetLogger.logInfo("Scrubbed Comapny Name is 
"+scrubbedCompanyName);
                 arr = null;


                if( fileName != null )
                {
                          File fname = new File(fileName);
                          FileUpload fileUpload = new FileUpload();
                          String default_folder = Constant.REPORTS_FOLDER;
                          String relativePath = FileUpload.getPathName
(companyId,scrubbedCompanyName,projectId,projectName,default_folder);
                          // append relative path to the Document Root defined 
in
FileUpload.properties file
                          String downloadPath = 
FileUpload.getPath(Constant.BLANK) + relativePath;
                          IntranetLogger.logInfo("In DownloadReportAction FULL 
PATH of the
file........." + downloadPath);
//                        response.flushBuffer(); 
                          FileInputStream istr = null ;
                          OutputStream ostr = null;
                          try
                          {
                                   IntranetLogger.logInfo("TOTAL DOWNLOAD PATH 
IS: "
+(downloadPath + fname));
                                   istr = new FileInputStream( downloadPath + 
fname);
                                   IntranetLogger.logInfo("File available? " + 
istr.available());
                                   IntranetLogger.logInfo("File name 
"+fileName);       
                                   if ( istr.available() == 0 )
                                   {
                                        IntranetLogger.logInfo("File Not 
available" + fileName);
                                        addErrors("error.document.empty", 
fileName,request);
                                   }
                                   else
                                   {
                                        // set content type of the response 
object to
Application/octet-stream. By setting this
                                        // we can download any type of file 
like txt, pdf, doc, xls etc
                                        
response.setContentType("APPLICATION/OCTET-STREAM");

                                        
response.setHeader("Content-Disposition",
"attachment;filename=\"" + fname.getName() +"\";");
                                        
                                        IntranetLogger.logInfo("Reponse content 
type set");

                                        // the following line is required to 
send a pop-up
open-save-cancel file dialog box
                                        ostr = response.getOutputStream();

                                        int bytesRead = 0;
                                        byte[] buffer = new byte[8192];


                                        while( (bytesRead = istr.read(buffer, 
0, 8192)) != -1)
                                           {
                                                  ostr.write(buffer, 0, 
bytesRead);
                                           }
//                                      ostr.flush();
                            istr.close();
                                    ostr.close();
                                    addMessages("download.success", fileName, 
request);
                                   }
                          }//try
                          catch(Exception ex)
                          {
                                IntranetLogger.logInfo("Error in flushing out 
the Streams: "+ex.toString());
                                // if file already exists, then gives the 
proper messeage.
                                addErrors("error.document.empty", 
fileName,request);
                                //forward = mapping.findForward( 
Constant.GENERATE_REPORT) ;
                                forward = 
mapping.findForward(Constant.DOWNLOAD_REPORT);
                          }
                          finally
                          {
                                   try
                                   {
                                        istr.close();
                                        ostr.close();
                                   }
                                   catch(Exception ex)
                                   {
                                        IntranetLogger.logInfo("Major Error 
Releasing Streams: "+ex.toString());
                                        addErrors("error.document.empty", 
fileName,request);
                                   }
                          }
                          try
                          {
                           response.flushBuffer();
                          }
                          catch(Exception ex)
                          {
                           IntranetLogger.logInfo("Error flushing the Response: 
"+ex.toString());
                           addErrors("error.document.empty", fileName, request);
                          }
                }
                return forward;
        }

public ActionForward findFailure( ActionMapping mapping, ActionForm form,
                                        HttpServletRequest request, 
HttpServletResponse response )
        {
                ActionForward forward = null;
                return (forward);
        }

}






On 6/14/05, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
> Quickly glancing at your code I believe you need to return null such as
> 
> ostr.close();
> return null;
> 
> HTH,
> Glenn
> 
> 
> 
> 
> Karthika L V somayajula <[EMAIL PROTECTED]>
> 14/06/2005 10:35 AM
> Please respond to
> "Struts Users Mailing List" <user@struts.apache.org>
> 
> 
> To
> user@struts.apache.org
> cc
> 
> Subject
> reponse commited
> 
> 
> 
> 
> 
> 
> I hope am into the right group
> 
> I have a problem with downloading files using struts.
> I am using J2SDK 1.4.2_06
> Struts 1.2.4
> Jboss 4.0.1RC2
> 
> 
> My download Action is :
> public ActionForward executeAction( ActionMapping mapping,
>                                                        ActionForm form,
>                                                        HttpServletRequest
> request,
>  HttpServletResponse response
>                                                       ) throws
> BusinessDelegateException,IOException
>                 {
> ReportGenerateForm rform = (ReportGenerateForm) form ;
> ActionForward forward = mapping.findForward(Constant.DOWNLOAD_REPORT);
> ReportGenerateDelegate  reportGenerateDelegate = new
> ReportGenerateDelegate();
> int empId = getIntranetUser( request ).getEmployeeID();
> String reportId = request.getParameter("rid");
> String companyId =
> String.valueOf(getIntranetUser(request).getCompanyId());
> String companyName = getIntranetUser(request).getCompanyName();
> String projectId = Constant.STRING_ZERO;
> String projectName = Constant.BLANK;
> String fn = reportGenerateDelegate.getFileName(reportId);
> 
> //prepend employee Id to file Name
> StringBuffer file = new StringBuffer(String.valueOf(empId));
> file.append(Constant.FILENAME_SEPERATOR_LITERAL).append(fn);
> String fileName = new String(file);
>  // scrub the company name
>  ArrayList arr = new ArrayList();
>  arr.add(companyName);
>  arr = (ArrayList)rform.validateData( arr ) ;
>  String scrubbedCompanyName = (String)arr.get(0);
>  IntranetLogger.logInfo("Scrubbed Comapny Name is "+scrubbedCompanyName);
>  arr = null;
> 
> if( fileName != null )
> {
>  File fname = new File(fileName);
>  FileUpload fileUpload = new FileUpload();
>  String default_folder = Constant.REPORTS_FOLDER;
>  String relativePath = FileUpload.getPathName
> (companyId,scrubbedCompanyName,projectId,projectName,default_folder);
> 
>  // append relative path to the Document Root defined in
> FileUpload.properties file
>  String downloadPath = FileUpload.getPath(Constant.BLANK) + relativePath;
>  IntranetLogger.logInfo("In DownloadReportAction FULL PATH of the
> file........." + downloadPath);
> 
>  FileInputStream istr = null ;
>  OutputStream ostr = null;
>  try
>  {
>   IntranetLogger.logInfo("TOTAL DOWNLOAD PATH IS: " +(downloadPath +
> fname));
>   istr = new FileInputStream( downloadPath + fname);
>   IntranetLogger.logInfo("File available? " + istr.available());
>   IntranetLogger.logInfo("File name "+fileName);
>   if ( istr.available() == 0 )
>   {
>    IntranetLogger.logInfo("File Not available" + fileName);
>    addErrors("error.document.empty", fileName,request);
>   }
>   else
>   {
>    // set content type of the response object to
> Application/octet-stream. By setting this
>  // we can download any type of file like txt, pdf, doc, xls etc
> response.setContentType("APPLICATION/OCTET-STREAM");
> response.setHeader("Content-Disposition", "attachment;filename=\"" +
> fname.getName() +"\";");
> IntranetLogger.logInfo("Reponse content type set");
> // the following line is required to send a pop-up open-save-cancel
> file dialog box
> ostr = response.getOutputStream();
> int bytesRead = 0;
> byte[] buffer = new byte[8192];
> while( (bytesRead = istr.read(buffer, 0, 8192)) != -1)
>  {
>  ostr.write(buffer, 0, bytesRead);
>  }
> //ostr.flush();
> istr.close();
> ostr.close();
> addMessages("download.success", fileName, request);
> }
> }//try
> catch(Exception ex)
> {
>  IntranetLogger.logInfo("Error in flushing out the Streams:
> "+ex.toString());
>  // if file already exists, then gives the proper messeage.
>  addErrors("error.document.empty", fileName,request);
>  //forward = mapping.findForward( Constant.GENERATE_REPORT) ;
>  forward = mapping.findForward(Constant.DOWNLOAD_REPORT);
> }
> finally
>  {
>  try
>  {
>  istr.close();
>  ostr.close();
> }
> catch(Exception ex)
> {
>  IntranetLogger.logInfo("Major Error Releasing Streams: "+ex.toString());
> addErrors("error.document.empty", fileName,request);
> }
> }
> try
> {
>  response.flushBuffer();
> }
> catch(Exception ex)
>  {
>   IntranetLogger.logInfo("Error flushing the Response: "+ex.toString());
>   addErrors("error.document.empty", fileName, request);
>  }
> }
> return forward;
> }
> 
> 
> 
> My jsp includes
> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
> 
> I get the list of file name with links in my JSP, one of which I click
> i should get a open, save file dialog box
> 
> Now, when i click on the the filename on link I get the exception
> StandardWrapperValve[action]:
> cannot forward,reponse already commited
> 
> 
> Please reply if you find mistakes or errors in my action
> 
> 
> Thank you advance
> 
> Karthika
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> 
> 
>

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

Reply via email to