Загрузка файлов в playframework в разных браузерах

Я использую playframework для создания веб-сайта. А еще я использую богатый редактор под названием xheditor .

Xheditor поддерживает загрузку ajax-файлов, ему необходимо, чтобы на стороне сервера было действие, которое принимает параметр "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 не является нулевым и содержит правильные данные. Но, если я использую chrome или firefox, данные файла будут null !!

Я использую firebug, чтобы отслеживать, что отправляет firebug, и обнаружил, что он отправляет такой заголовок:

content-disposition
attachment; name="filedata"; filename="051111twdns.zip"

Я думаю, что play не обработайте этот случай правильно, поэтому параметр "filedata" имеет значение null.

Для работы с chrome и firefox я изменил это действие:

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, chrome и firefox, НО , только если загружаемый файл очень маленький. Например, меньше 4K. Если он немного больше, например 12K, метод «IOUtils.copy» сообщит «Ошибка чтения!», даже следующий код сообщит о такой ошибке:

request.body.available()
request.body.read()
request.body.read(bytes)

7
задан Cœur 1 May 2017 в 18:03
поделиться