Index: lams_central/src/java/org/lamsfoundation/lams/authoring/web/ExportToolContentAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/authoring/web/ExportToolContentAction.java,v diff -u -r1.12 -r1.13 --- lams_central/src/java/org/lamsfoundation/lams/authoring/web/ExportToolContentAction.java 28 Sep 2007 04:03:05 -0000 1.12 +++ lams_central/src/java/org/lamsfoundation/lams/authoring/web/ExportToolContentAction.java 19 Oct 2007 06:51:01 -0000 1.13 @@ -31,11 +31,9 @@ import java.io.OutputStream; import java.util.ArrayList; import java.util.List; -import java.net.URLEncoder; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.mail.internet.MimeUtility; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; @@ -117,32 +115,7 @@ //write zip file as response stream. // Different browsers handle stream downloads differently LDEV-1243 - String agent = request.getHeader("USER-AGENT"); - - log.debug("Browser is:" + agent); - - String filename = null; - - - - if (null != agent && -1 != agent.indexOf("MSIE")) - { - // if MSIE then urlencode it - filename = URLEncoder.encode(zipfile, "UTF-8"); - - } - else if (null != agent && -1 != agent.indexOf("Mozilla")) - { - // if Mozilla then base64 url_safe encoding - filename = MimeUtility.encodeText(zipfile, "UTF-8", "B"); - - } - else - { - // any others use same filename. - filename = zipfile; - - } + String filename = FileUtil.encodeFilenameForDownload(request, zipfile); log.debug("Final filename to export: " + filename); response.setContentType("application/x-download"); Index: lams_common/src/java/org/lamsfoundation/lams/util/FileUtil.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/util/FileUtil.java,v diff -u -r1.25 -r1.26 --- lams_common/src/java/org/lamsfoundation/lams/util/FileUtil.java 29 May 2007 06:17:38 -0000 1.25 +++ lams_common/src/java/org/lamsfoundation/lams/util/FileUtil.java 19 Oct 2007 06:51:25 -0000 1.26 @@ -28,13 +28,17 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.nio.channels.FileChannel; import java.util.Date; +import javax.servlet.http.HttpServletRequest; + import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.lamsfoundation.lams.util.zipfile.ZipFileUtilException; +import javax.mail.internet.MimeUtility; /** * General File Utilities @@ -550,4 +554,37 @@ name = name.replaceAll("\\;", ""); return name; } + + /** Encode a filename in such a way that the UTF-8 characters won't be munged during the download by a browser. Need the + * request to work out the user's browser type + * @return encoded filename + * @throws UnsupportedEncodingException + */ + public static String encodeFilenameForDownload(HttpServletRequest request, String unEncodedFilename) throws UnsupportedEncodingException { + + // Different browsers handle stream downloads differently LDEV-1243 + String agent = request.getHeader("USER-AGENT"); + String filename = null; + + if (null != agent && -1 != agent.indexOf("MSIE")) + { + // if MSIE then urlencode it + filename = URLEncoder.encode(unEncodedFilename, "UTF-8"); + + } + else if (null != agent && -1 != agent.indexOf("Mozilla")) + { + // if Mozilla then base64 url_safe encoding + filename = MimeUtility.encodeText(unEncodedFilename, "UTF-8", "B"); + + } + else + { + // any others use same filename. + filename = unEncodedFilename; + + } + + return filename; + } }