In Struts 1.1, the default file upload mechanism *is* Commons FileUpload. ;-)
It seems that you may have omitted to tell the browser explicitly that your pages are in UTF-8. For some reason that I've never fully understood, that causes the browser to use UTF-8 when it submits subsequent requests from that page. Make sure that you use a <meta> element in your <head> to specify UTF-8. -- Martin Cooper "Paul Barry" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > I think you are correct. When I was looking at the packets and seeing two characters, it is actually the characters > that are equal to the 2 bytes that make up the single UTF-8 character. I thought the browser was somehow not correctly > encoding my data, because it was turning 1 character into 2 characters, but actually it is UTF-8 encoding my character > correctly. So I think if I use something to read the data and convert it from UTF-8 to Unicode, I will get the correct > data on the server. > > So from reading the documentation about FileUpload, that seems to be the way to go, but now my question is how to > integrate FileUpload with struts? My thought would be to call a method to populate an ActionForm in the beginning of my > action, and then use that ActionForm instead of the one I get from the requestProcessor. So like this: > > public ActionForward execute( > ActionMapping mapping, > ActionForm pform, > HttpServletRequest request, > HttpServletResponse response) > throws Exception { > TestActionForm form = getFormUsingFileUpload(request); > log.info("The value is: "+form.getTest()); > return null; > } > > Is this how others have used Jakarta Commons FileUpload with Struts, or is there a better way? > > > Jason Lea wrote: > > > From what I can see there Resin is expecting UTF-8 for any paramters > > passed to it, and decoding it correctly. However multipart/form-data is > > treated differently as the data is not passed as normal parameters so > > the request.getParameter() cannot be used here (and servlet filters that > > set the request encoding won't help either). > > > > You normally have to use something like the FileUpload component to > > extract form fields and files from the request. This component is not > > going to know about the character encoding you have given to resin, so > > it will use the default which is probably US-ASCII. With UTF-8 a single > > character can be rendered as 1, 2 or 3 bytes. When decoding a UTF-8 > > string the decoder will combine the 1,2 or 3 byte combinations into 1 > > Unicode character. When UTF-8 is not used to decode the string you will > > see the individual bytes. > > > > Looking here (the jakarta apache FileUpload component): > > http://jakarta.apache.org/commons/fileupload/apidocs/org/apache/commons/fileupload/FileUploadBase.html > > > > > > They have a setHeaderEncoding() method which I assume will deal with > > this problem (I haven't tested this so I don't know). Are you using a > > file upload component? > > > > > > Paul Barry wrote: > > > >> I am using Struts 1.1 in an application that needs to support the > >> UTF-8 character set. I am using Resin 2.1.10 with > >> character-encoding="UTF-8", and on most of my forms this seems to work > >> just fine. I am having problems with forms that have to use the > >> multipart/form-data enctype for handling uploading files. If I print > >> out the value of a text element in an html:form where the enctype is > >> not set at all (which ends up using > >> application/x-www-form-urlencoded), using UTF-8 characters works > >> fine. This is what I get: > >> > >> INFO - test.TestAction - The value is: ä > >> > >> Here is what the actual HTTP request that gets sent to the server > >> looks like: > >> > >> --- Start HTTP Request > >> ----------------------------------------------------- > >> POST /testForm.do HTTP/1.1 > >> Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, > >> application/x-shockwave-flash, */* > >> Referer: http://pbdesktop/test.do > >> Accept-Language: en-us > >> Content-Type: application/x-www-form-urlencoded > >> Accept-Encoding: gzip, deflate > >> User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) > >> Host: pbdesktop > >> Content-Length: 11 > >> Connection: Keep-Alive > >> Cache-Control: no-cache > >> Cookie: SERVER=op; locale=en_US; JSESSIONID=aoUCARQpqsLd > >> > >> test=%C3%AD > >> --- End HTTP Request > >> ------------------------------------------------------ > >> > >> But if I modify my html:form to use enctype="multipart/form-data", I > >> get this: > >> > >> INFO - test.TestAction - The value is: A¤ > >> > >> And the HTTP request looks like this: > >> > >> --- Start HTTP Request > >> ----------------------------------------------------- > >> POST /testForm.do HTTP/1.1 > >> Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, > >> application/x-shockwave-flash, */* > >> Referer: http://pbdesktop/test.do > >> Accept-Language: en-us > >> Content-Type: multipart/form-data; > >> boundary=---------------------------7d319628600e4 > >> Accept-Encoding: gzip, deflate > >> User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) > >> Host: pbdesktop > >> Content-Length: 141 > >> Connection: Keep-Alive > >> Cache-Control: no-cache > >> Cookie: SERVER=op; locale=en_US; JSESSIONID=aoUCARQpqsLd > >> > >> -----------------------------7d319628600e4 > >> Content-Disposition: form-data; name="test" > >> > >> Ã > >> -----------------------------7d319628600e4- > >> --- End HTTP Request > >> ------------------------------------------------------ > >> > >> It looks as if the character is already messed up before it even gets > >> to the servlet container. There are messages in the mailing list > >> archive that discuss this problem, but I didn't see a solution. What > >> is the best way to handle UTF-8 characters in a multipart/form-data > >> encoded form? > >> > >> Here is the code that I am testing with: > >> > >> /test/test.jsp: > >> <%@ taglib uri="WEB-INF/taglib/struts-html.tld" prefix="html" %> > >> <%@ taglib uri="WEB-INF/taglib/struts-bean.tld" prefix="bean" %> > >> > >> <html:html> > >> <body> > >> <html:form action="testForm.do" enctype="multipart/form-data"> > >> <html:text property="test" /> > >> <html:submit /> > >> </html:form> > >> </body> > >> </html:html> > >> > >> Relavent parts of struts-config.xml: > >> <struts-config> > >> > >> <form-beans> > >> <form-bean name="testForm" type="test.TestActionForm" /> > >> </form-beans> > >> > >> <action-mappings> > >> <action path="/test" > >> type="org.apache.struts.actions.ForwardAction" > >> parameter="/test/test.jsp" /> > >> <action path="/testForm" type="test.TestAction" name="testForm" > >> input="/test.do" scope="request" /> > >> </action-mappings> > >> > >> <controller contentType="text/html;charset=UTF-8" /> > >> > >> <struts-config/> > >> > >> test.TestAction: > >> package test; > >> > >> import javax.servlet.http.*; > >> import org.apache.commons.logging.*; > >> import org.apache.struts.action.*; > >> > >> public class TestAction extends Action { > >> private static final Log log = LogFactory.getLog(TestAction.class); > >> > >> public ActionForward execute( > >> ActionMapping mapping, > >> ActionForm pform, > >> HttpServletRequest request, > >> HttpServletResponse response) > >> throws Exception { > >> TestActionForm form = (TestActionForm)pform; > >> log.info("The value is: "+form.getTest()); > >> return null; > >> } > >> } > >> > >> test.TestActionForm: > >> package test; > >> > >> import org.apache.struts.action.ActionForm; > >> > >> public class TestActionForm extends ActionForm { > >> private String test; > >> public String getTest() { return test; } > >> public void setTest(String string) { test = string; } > >> } > >> > >> > >> --------------------------------------------------------------------- > >> 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]