【问题标题】:Play Framework activator 2.3 Upload file does not workPlay Framework activator 2.3 上传文件不起作用
【发布时间】:2023-03-30 22:40:01
【问题描述】:

我目前正在使用 play framework 2.3 - typesafe activator distribution。当我需要从浏览器前端上传文件以播放框架后端时,我遇到了问题。我已经测试了http://www.playframework.org/documentation/2.0/JavaFileUpload中给出的指令

这是我的用户界面代码:

@helper.form(action = routes.ProjectController.uploadFile, 'enctype -> "multipart/form-data"){

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

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

}

这是我的路线配置

POST /project/upload @controllers.ProjectController.uploadFile

这是我的java代码。

    private static final int MAX_LENGTH = 100 * 1024 * 1024;

    @BodyParser.Of(value = BodyParser.Json.class, maxLength = MAX_LENGTH)
     public Result uploadFile() {
      MultipartFormData body2 = request().body().asMultipartFormData();
      FilePart picture = body2.getFile("picture");
      if (picture != null) {
        String fileName = picture.getFilename();
        String contentType = picture.getContentType();
        File file = picture.getFile();
        return ok("File uploaded");
      } else {
        flash("error", "Missing file");
        return ok("Failed to upload");
      }
    }

但是当代码到达时

MultipartFormData body2 = request().body().asMultipartFormData();

body2 的值​​始终为空。文件好像不是通过 HTTP post 发送的?

此外,我还测试了使用角度上传,如 https://github.com/danialfarid/angular-file-upload

但它使用了播放框架不支持的HttpServletRequest。

谁能告诉我我犯的错误在哪里,以至于play java应用程序没有检索到文件? 如果有任何其他替代方案可以实现此上传功能,我将不胜感激。

谢谢

【问题讨论】:

    标签: playframework playframework-2.3


    【解决方案1】:

    你应该把这个@BodyParser.Of(value = BodyParser.Json.class, maxLength = MAX_LENGTH)改成@BodyParser.Of(value = BodyParser.AnyContent.class, maxLength = MAX_LENGTH)

    您将BodyParser 设置为json 并上传图片,当您的解析器检测到上传的内容(image) 与json 不匹配时,它将返回null。参考这个link

    【讨论】:

      猜你喜欢
      • 2015-05-13
      • 2014-09-28
      • 1970-01-01
      • 2015-08-21
      • 1970-01-01
      • 1970-01-01
      • 2015-04-02
      • 1970-01-01
      • 2018-02-18
      相关资源
      最近更新 更多