【问题标题】:Play Framework 2. Multiple file uploading and processingPlay Framework 2. 多文件上传与处理
【发布时间】:2012-07-02 06:57:42
【问题描述】:

我正在尝试使用 Play 2 同时加载多个文件,并使用异步 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)
                            );
                    }
                }
            )
        );


    }

所以

gallery.addItem(item);

需要很多时间,下次调用

Logger.debug("picFile:" + picFile.exists());

说 picFile 不存在。我知道,这是因为这些文件是临时的……但是它们应该存在更长时间吗?问题是:如何解决这个麻烦。我应该查看 java 中的临时文件吗?

【问题讨论】:

    标签: playframework-2.0


    【解决方案1】:

    看起来解决方案很简单。我应该将文件保存在我自己的缓存中,直到我在 Akka worker 中使用它们。用 Akka 处理后,我可以自己删除它。 这种行为的原因是不浪费文件描述符。从请求中获取的文件将在 Akka 启动之前被删除。 无论如何,这只是一个猜测。我现在就试试。

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

    【讨论】:

    • 文件上传问题经常被问到,您能否更新问题并添加适合您的解决方案的正确代码?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 2018-02-21
    相关资源
    最近更新 更多