J'utilise playframework pour créer un site Web. Et j'utilise également un éditeur riche nommé xheditor.Télécharger un fichier dans playframework avec différents navigateurs
Xheditor support ajax-fileuploading, il faut que le côté serveur ait une action qui accepte le paramètre "filedata" qui contient le fichier de téléchargement.
J'ai donc écrit une action de téléchargement:
public class Application extends Controller {
public static void upload(File filedata) {
// the filedata should not be null
renderText("{'err':'', 'msg':{'ur':'/uploaded/xxx.zip'}}");
}
}
Il fonctionne très bien dans IE6, le filedata est non nul et contient les données correctes. Mais, si j'utilise chrome ou firefox, le fichier est null !!
J'utilise Firebug pour surveiller ce que le Firebug soumettre, et ils ont trouvé soumettre un en-tête:
content-disposition
attachment; name="filedata"; filename="051111twdns.zip"
Je pense que le jeu n'a pas manipuler correctement ce cas, si le paramètre « filedata » est nulle.
Pour travailler avec Chrome et Firefox, j'ai modifié cette action:
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));
}
}
}
Ceci est travaillé dans IE6, Chrome et Firefox maintenant, MAIS, que si le fichier de téléchargement est très faible. Par exemple. moins de 4K. Si c'est un peu plus grand, par ex. 12K, la méthode « IOUtils.copy » rapportera « Read Error! », Même le code suivant signaler cette erreur:
request.body.available()
request.body.read()
request.body.read(bytes)