Estoy usando playframework para crear un sitio web. Y también uso un editor rico llamado xheditor.Carga de archivos en playframework con diferentes navegadores
Xheditor admite ajax-fileuploading, necesita que el servidor tenga una acción que acepte el parámetro "filedata" que contiene el archivo de carga.
Así que escribió una acción de carga:
public class Application extends Controller {
public static void upload(File filedata) {
// the filedata should not be null
renderText("{'err':'', 'msg':{'ur':'/uploaded/xxx.zip'}}");
}
}
Funciona bien en IE6, el filedata no es nulo y contiene los datos correctos. Pero, si uso Chrome o Firefox, los archivos son null !!
utilizo Firebug para monitorear lo que presente el incendiario, y lo encontraron presentar una cabecera como:
content-disposition
attachment; name="filedata"; filename="051111twdns.zip"
Creo que el juego no ha manejar este caso correctamente, por lo que el parámetro "filedata" es nulo.
Con el fin de trabajar con Chrome y Firefox, modifiqué esa acción:
public class Application extends Controller {
public static void upload(File filedata) {
if(filedata!=null) {
// ok, it's IE6
renderText("{'err':'', 'msg':{'ur':'/uploaded/xxx.zip'}}");
} else {
// it's chrome or firefox, the data is in request.body
File targetFile = new File("upload/test.zip");
IOUtils.copy(request.body, new FileOutputStream(targetFile));
}
}
}
Esto se trabajó en IE6, Chrome y Firefox ahora, PERO, sólo si el archivo de carga es muy pequeña. P.ej. menos de 4K. Si es un poco más grande, p. 12K, el método "IOUtils.copy" informará "Read Error!", Incluso el siguiente código informará dicho error:
request.body.available()
request.body.read()
request.body.read(bytes)