Struts will use org.apache.struts.upload.CommonsMultipartRequestHandler by default to handle extracting the parameters out of the request and populating the form. It uses the DiskFileUpload class from Commons FileUpload. It is that handler that we need to modify, to do that we could create our own using the org.apache.struts.upload.CommonsMultipartRequestHandler source as the basis.
We need to tell Struts to use ours instead of the defualt by adding this to your struts-config.xml
<controller multipartClass="my.own.MultiPartClassHandler" />
Then to modify org.apache.struts.upload.CommonsMultipartRequestHandler by creating our my.own.MultiPartClassHandler class.
We need to modify the handleRequest() method like so:
// Create and configure a DIskFileUpload instance. DiskFileUpload upload = new DiskFileUpload();
upload.setHeaderEncoding("UTF-8");
// Set the maximum size before a FileUploadException will be thrown. upload.setSizeMax((int) getSizeMax(ac)); ...
This is all untested and off the top of my head, so there is likely to be a mistake there somewhere, but I think it is possible.
Daniel Rabe wrote:
I see a similar problem with file upload. It doesn't look like org.apache.strugs.upload.FormFile exposes a setHeaderEncoding method...
Daniel Rabe
-----Original Message-----
From: Jason Lea [mailto:[EMAIL PROTECTED] Sent: Friday, December 26, 2003 1:33 PM
To: Struts Users Mailing List
Subject: Re: What is wrong with this upload filename (UTF-8) decoding?
I have not used the file upload yet, but I believe you need to set the encoding for the headers
formFile.setHeaderEncoding("UTF-8")
setHeaderEncoding does this:
"Specifies the character encoding to be used when reading the headers of individual parts. When not specified, or |null|, the platform default encoding is used."
If this was running on a English operating system it is probably defaulting to the Latin-1 encoding.
From this Java Doc: http://jakarta.apache.org/commons/fileupload/apidocs/org/apache/commons/file upload/FileUploadBase.html#setHeaderEncoding(java.lang.String)
Please post back to the forum if this works. I would be interested in the result.
Zsolt Koppany wrote:
Hi,
my application has to support UTF-8 including when files are uploaded with UTF-8 characters in the filename (for example: ??????????????.txt).
I use a servlet filter that always call
request.setCharacterEncoding("UTF-8") and my jsp pages contain response.setContentType("text/html; charset=UTF-8");
Everything works fine except that I have problems with decoding of the name of uploaded filenames.
I use the code below to get the name of the uploaded filename:
String nm = formFile.getFileName(); String filename = new String(nm.getBytes(), "UTF-8");
The code above converts only the first couple of characters correctly (result: ??????????????????????.txt).
Any ideas how to fix the problem?
I use TC-4.1.29, Struts-1.1, jdk1.4.2_02 Windows-XP.
Zsolt
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
-- Jason Lea
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]