Date: 2004-11-26T01:05:50 Editor: NiallPemberton <[EMAIL PROTECTED]> Wiki: Apache Struts Wiki Page: StrutsFileDownload URL: http://wiki.apache.org/struts/StrutsFileDownload
no comment Change Log: ------------------------------------------------------------------------------ @@ -10,6 +10,7 @@ * ResourceStreamInfo Example * Bye Array Example * Using the DownloadAction in you Web Pages + * Content Disposition (niallp: Since I haven't actually used this class myself, I'm hoping that Martin, Frank or anyone else involved in the discussion/creation of this would take a look here to see if its OK) @@ -192,3 +193,56 @@ }}} +== Content Disposition == + +=== Setting the Content Disposition === +DownloadAction doesn't cater for setting the content dispositon header. I guess at the moment the best way to do that would be override the execute() method and set it first, something like this... + +{{{ + +public class ExampleFileDownload extends DownloadAction{ + + + + protected StreamInfo getStreamInfo(ActionMapping mapping, + ActionForm form, + HttpServletRequest request, + HttpServletResponse response) + throws Exception { + + // Download a "pdf" file - gets the file name from the + // Action Mapping's parameter + String contentType = "application/pdf"; + File file = new File(mapping.getParameter()); + + return new FileStreamInfo(contentType, file); + + } + + public ActionForward execute(ActionMapping mapping, + ActionForm form, + HttpServletRequest request, + HttpServletResponse response) + throws Exception { + + response.setHeader("Content-disposition", + "attachment; filename=" + mapping.getParameter()); + + return super.execute(mapping, form, request, response); + + } +} + +}}} + +Probably would want to play with the file name, to remove any path info first. + +=== Content Disposition Values === + +You can set the content disposition to either download the file or open up in the browser: + * To open up in the browser: "inline; filename=myFile.pdf" + * To download: "attachment; filename=myFile.pdf" + +Displaying images I always set the content disposition to the "inline" option. + +'''NOTE:''' I'm not expert at this, just got it working by trial and error. I had problems and I'm seem to remember I had to play with setting the response headers to get it to work properly. There may also be browser issues - my app only has to work with IE. Anyone who knows more about this, feel free to amend this page. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]