Play Framework 激活器 2.3 上传文件不起作用
Play Framework activator 2.3 Upload file does not work
我目前正在使用 play framework 2.3 - typesafe activator distribution。当我需要从浏览器前端上传文件以播放框架后端时,我遇到了问题。我已经测试了 http://www.playframework.org/documentation/2.0/JavaFileUpload
中给出的指令
这是我的 UI 代码:
@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?
此外,我还使用 angular 上传进行了测试,如
https://github.com/danialfarid/angular-file-upload
但是它使用了 play 框架不支持的 HttpServletRequest。
任何人都可以让我知道我犯了什么错误,以至于播放 java 应用程序没有检索到该文件吗?
如果有任何其他替代方法来实现此上传功能,我将不胜感激。
谢谢
您应该将此 @BodyParser.Of(value = BodyParser.Json.class, maxLength = MAX_LENGTH)
更改为 @BodyParser.Of(value = BodyParser.AnyContent.class, maxLength = MAX_LENGTH)
您将 BodyParser
设置为 json
并上传图片,当您的解析器检测到上传的内容 (image
) 与 json
不匹配时,它将 return null
。参考这个 link
我目前正在使用 play framework 2.3 - typesafe activator distribution。当我需要从浏览器前端上传文件以播放框架后端时,我遇到了问题。我已经测试了 http://www.playframework.org/documentation/2.0/JavaFileUpload
中给出的指令这是我的 UI 代码:
@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?
此外,我还使用 angular 上传进行了测试,如 https://github.com/danialfarid/angular-file-upload
但是它使用了 play 框架不支持的 HttpServletRequest。
任何人都可以让我知道我犯了什么错误,以至于播放 java 应用程序没有检索到该文件吗? 如果有任何其他替代方法来实现此上传功能,我将不胜感激。
谢谢
您应该将此 @BodyParser.Of(value = BodyParser.Json.class, maxLength = MAX_LENGTH)
更改为 @BodyParser.Of(value = BodyParser.AnyContent.class, maxLength = MAX_LENGTH)
您将 BodyParser
设置为 json
并上传图片,当您的解析器检测到上传的内容 (image
) 与 json
不匹配时,它将 return null
。参考这个 link