struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Karthika L V somayajula <karthikasl...@gmail.com>
Subject reponse commited
Date Tue, 14 Jun 2005 14:35:09 GMT
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: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Mime
View raw message