2016-01-30 2 views
0

Это здесь его действие с контроллером, могу ли я сделать этот асинхронный (просто любопытный)?Загрузить форму в ошибке playframework 413 запросить объект на большой

def upload = Action(parse.multipartFormData) { request => 
    request.body.file("picture").map { picture => 
     import java.io.File 
     val filename = picture.filename 
     val contentType = picture.contentType 
     picture.ref.moveTo(new File("/tmp/picture")) 
     Ok("File uploaded") 
     }.getOrElse { 
     Redirect(routes.Application.index).flashing(
      "error" -> "Missing file" 
     ) 
     } 
    } 

Маршрут

GET  /admin/carro/upload   controllers.AdminCarro.upload 

Шаблон

@import helper._ 


@main(new Main("Car Dealers", "Compra e venda de carros", "logo.png", "carro, compra, venda")) { 
    <div class="container"> 
    @form(routes.AdminCarro.upload, 'enctype -> "multipart/form-data") { 

     <input type="file" name="picture"> 

     <p> 
      <input type="submit"> 
     </p> 

    } 
    </div> 
} 

Это 413 Request объект в большой происходит без отправки любого файла или иметь что-нибудь подарил.

+0

Когда это произойдет? Вы отправляете запрос на '/ admin/carro/upload' без файла? – marcospereira

+0

Да. Это просто простой запрос на представление формы страницы, и ничего не показывает, что возвращается только ошибка 413. –

ответ

1

Я не уверен, чего вы пытаетесь достичь, делая это так. Почему вы не представить вид с GET и выгрузку с POST:

def uploadView = Action.async { request => 
    Future.successful(Ok(views.html.uploadForm)) 
} 

def upload = Action(parse.multipartFormData).async { request => 
    request.body.file("picture").map { picture => 
     import java.io.File 
     val filename = picture.filename 
     val contentType = picture.contentType 
     picture.ref.moveTo(new File("/tmp/picture")) 
     Future.successful(Ok("File uploaded")) 
     }.getOrElse { 
     Future.successful(Redirect(routes.Application.index).flashing(
      "error" -> "Missing file" 
     )) 
     } 
    } 

И файл маршрутов:

GET  /admin/carro/upload   controllers.AdminCarro.uploadView 
    POST /admin/carro/upload   controllers.AdminCarro.upload 

Кроме того, если вы загружаете большие файлы, которые вы могли бы укажите максимальную шестерку для всех парсеров:

parsers.text.maxLength=5242880 

или для действий

Action(parse.text(maxLength = 1024 * 10)) 
+0

Я привык к PHP, где я могу в том же запросе отделить POST от запроса GET просто и без проблем. : \ Любопытный, если это то же самое для Java и JavaServlets? –

+0

Это не ошибка, это функция;) хотя в методах PHP-запросов можно смешивать, это не рекомендуется, так как это ставит под угрозу безопасность. Де-факто разработчик должен ожидать точного метода по каждому запросу, и так работает Play (для приложения экземпляра возвращается 404, если нет определенного маршрута POST, вместо этого «пересылка» его в GET). По своему вкусу я предпочитаю более безопасный подход. В предыдущей версии Play (branch 1.x) существует подстановочный метод __ * __ (звездочка), который обозначает метод __any__, в любом случае во имя безопасности его избегали в Play 2.x – biesior

Смежные вопросы