Playframework 2.0 播放框架2。多文件上传和处理
我正在尝试使用Play2同时加载多个文件,并使用异步api为它们构建一些缩略图。 上传是很好的工作,当图像处理开始时会出现很大的麻烦。 问题如下(有点描述):从请求中提取并收集到列表中的文件在图像处理过程中消失(需要很多时间) 这里有一些例子:Playframework 2.0 播放框架2。多文件上传和处理,playframework-2.0,Playframework 2.0,我正在尝试使用Play2同时加载多个文件,并使用异步api为它们构建一些缩略图。 上传是很好的工作,当图像处理开始时会出现很大的麻烦。 问题如下(有点描述):从请求中提取并收集到列表中的文件在图像处理过程中消失(需要很多时间) 这里有一些例子: //part of controller public static Result addPictures2(Long galleryId) { MultipartFormData body = reques
//part of controller
public static Result addPictures2(Long galleryId) {
MultipartFormData body = request().body().asMultipartFormData();
final List<FilePart> fileList = body.getFiles();
final Long fGalleryId = galleryId;
Promise<Boolean> promiseOfBool = Akka.future(
new Callable<Boolean>() {
public Boolean call() {
Gallery gallery = Gallery.find.byId(fGalleryId);
for(FilePart part : fileList) {
File picFile = part.getFile();
Logger.debug("picFile: " + picFile.exists());
String extension = FilenameUtils.getExtension(part.getFilename());
GalleryItem item = new GalleryItem("", "", picFile, extension);
gallery.addItem(item);
}
gallery.update();
return true;
}
}
);
return async(
promiseOfBool.map(
new Function<Boolean, Result>() {
public Result apply(Boolean b) {
return redirect(
controllers.backend.routes.GalleryContentController.showGalleryItemsPage(fGalleryId)
);
}
}
)
);
}
//控制器的一部分
公共静态结果addPictures2(长galleryId){
MultipartFormData body=request().body().asMultipartFormData();
最终列表fileList=body.getFiles();
最终长fGalleryId=galleryId;
允诺,许诺未来
新的可调用(){
公共布尔调用(){
Gallery=Gallery.find.byId(fGalleryId);
对于(文件部分:文件列表){
File picFile=part.getFile();
debug(“picFile:+picFile.exists());
字符串扩展名=FilenameUtils.getExtension(part.getFilename());
GalleryItem=new GalleryItem(“,”,picFile,扩展名);
附录(项目);
}
gallery.update();
返回true;
}
}
);
异步返回(
bool.map的承诺(
新函数(){
公共结果应用(布尔b){
返回重定向(
controllers.backend.routes.GalleryContentController.showGalleryItemsPage(fGalleryId)
);
}
}
)
);
}
所以
附录(项目)
要花很多时间,下一个电话是
debug(“picFile:+picFile.exists())
表示picFile不存在。我知道,这是因为那些文件是临时的。。。但是他们应该存在更长一点吗?问题是:如何解决这个问题。我应该看看java中的临时文件吗?看起来解决方案非常简单。在Akka worker中使用之前,我应该将文件保存在自己的缓存中。在与Akka处理后,我可以自己删除它。 这种行为的原因不是为了浪费文件描述符。从请求中获取的文件将在Akka启动之前删除。 无论如何,这只是一个猜测。我现在就试试
附言:是的。有一个问题。解决方案是将这些文件保留为临时文件,仅在处理后删除。文件上载问题经常被问到,您能否更新问题并添加适合您的解决方案的正确代码?