0

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で一時ファイルを見る必要がありますか?

4

1 に答える 1

0

解決策は非常に簡単に見えます。ファイルを Akka ワーカーで使用するまで、自分のキャッシュにファイルを保持する必要があります。Akka で処理した後、自分で削除できました。このような動作の理由は、ファイル記述子を無駄にするためではありません。リクエストから取得されたファイルは、Akka が起動する前に削除されます。とにかくこれは単なる推測です。今試してみます。

PS はい。問題がある。解決策は、これらのファイルを一時的に保持し、処理後にのみ削除することです。

于 2012-07-01T17:08:05.737 に答える