Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Playframework 2.0 播放框架2。多文件上传和处理_Playframework 2.0 - Fatal编程技术网

Playframework 2.0 播放框架2。多文件上传和处理

Playframework 2.0 播放框架2。多文件上传和处理,playframework-2.0,Playframework 2.0,我正在尝试使用Play2同时加载多个文件,并使用异步api为它们构建一些缩略图。 上传是很好的工作,当图像处理开始时会出现很大的麻烦。 问题如下(有点描述):从请求中提取并收集到列表中的文件在图像处理过程中消失(需要很多时间) 这里有一些例子: //part of controller public static Result addPictures2(Long galleryId) { MultipartFormData body = reques

我正在尝试使用Play2同时加载多个文件,并使用异步api为它们构建一些缩略图。 上传是很好的工作,当图像处理开始时会出现很大的麻烦。 问题如下(有点描述):从请求中提取并收集到列表中的文件在图像处理过程中消失(需要很多时间)

这里有一些例子:

//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启动之前删除。 无论如何,这只是一个猜测。我现在就试试


附言:是的。有一个问题。解决方案是将这些文件保留为临时文件,仅在处理后删除。

文件上载问题经常被问到,您能否更新问题并添加适合您的解决方案的正确代码?