Я использую playframework для создания веб-сайта. И я также использую богатый редактор с именем xheditor.Загрузка файла в playframework с различными браузерами
Xheditor поддерживает ajax-fileuploading, ему нужна сторона сервера, которая принимает параметр «filedata», который содержит файл для загрузки.
Так что я написал выгружать:
public class Application extends Controller {
public static void upload(File filedata) {
// the filedata should not be null
renderText("{'err':'', 'msg':{'ur':'/uploaded/xxx.zip'}}");
}
}
Он отлично работает в IE6, то FileData не является недействительным и содержит правильные данные. Но, если я использую хром или firefox, filedata - null !!
Я использую поджигатель контролировать то, что поджигатель представить, и нашел его представить такой заголовок:
content-disposition
attachment; name="filedata"; filename="051111twdns.zip"
Я думаю, что игра не обрабатывать этот случай правильно, поэтому параметр «FileData» равна нулю.
Для работы с хромом и светлячок, я изменил это действие:
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));
}
}
}
Это работало в IE6, хром и Firefox теперь НО, только если загрузить файл очень мал. Например. менее 4K. Если он немного больше, например. 12K, метод «IOUtils.copy» сообщит «Read Error!», Даже следующий код будет сообщать такую ошибку:
request.body.available()
request.body.read()
request.body.read(bytes)