Estoy usando las herramientas Apache Commons Fileupload para cargar archivos estándar. Mi problema es que no puedo obtener el nombre de archivo correcto de los archivos cargados si contienen caracteres especiales (á, é, ú, etc.) ¿Todos se convierten a? señales.file de servlet cargar la codificación del nombre de archivo
request.getCharacterEncoding() dice UTF-8, pero los bytes que obtengo en la cadena fileItem.getName() son todos iguales para todos mis caracteres especiales.
¿Me puede ayudar lo que está mal?
(Algunos detalles: el uso de Firefox 3.6.12, Weblogic 10.3 en Windows)
Esta es mi fragmento de código:
public CommandMsg(HttpServletRequest request) {
Enumeration names = null;
if (isMultipart(request)) {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List uploadedItems = upload.parseRequest(request);
Iterator i = uploadedItems.iterator();
FileItem fileItem = null;
while (i.hasNext()) {
fileItem = (FileItem) i.next();
if (fileItem.isFormField()) {
// System.out.println("isFormField");
setAttribute(fileItem.getFieldName(), fileItem.getString());
} else {
String enc = "utf-8";
enc = request.getCharacterEncoding();
String fileName = fileItem.getName();
byte[] fnb = fileItem.getName().getBytes();
byte[] fnb2 = null;
try {
fnb2 = fileItem.getName().getBytes(enc);
String t1 = new String(fnb);
String t2 = new String(fnb2);
String t3 = new String(fnb, enc);
String t4 = new String(fnb2, enc);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
setAttribute(fileItem.getFieldName(), fileItem);
}
}
} catch (FileUploadException ex) {
ex.printStackTrace();
}
// etc..
¿Ha intentado para obtener el nombre de archivo con y sin decodificar el nombre del archivo? Es un poco extraño que haya tal problema en una biblioteca ampliamente utilizada. – gigadot
sí, como puede ver, el primer intento es: "String fileName = fileItem.getName();" cual es malo. Todas las demás líneas (t1..4) son solo intentos desesperados ... :-) – jabal