0

ファイルをプレイサブディレクトリに保存する画像をアップロードするためのフォームを作成しました/public/images/

たとえば/public/images/test.jpg、ここに保存されている画像は、次のような方法でアクセスされますhttp://example.com/assets/images/test.jpg

ブラウザーは、このリンクが壊れていることを示します。再生サーバーをリセットするまで、最近アップロードされた画像にアクセスできます。

「実行」コマンドを使用して再生サーバーを開発モードで実行すると、そのようなリセットを行わなくても画像をアップロードしてアクセスできます。

/conf/routesが持っている

GET        /assets/*file        controllers.Assets.at(path="/public", file)
4

2 に答える 2

0

私は同じ問題に遭遇しました。遊びではこれが簡単にできないというのは、非常に驚​​くべきことです。imagescalr ライブラリを使用して外部パスからサムネイルを提供する関連コントローラーを次に示します。

package controllers;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.apache.commons.io.output.ByteArrayOutputStream;
import play.mvc.Controller;
import play.mvc.Result;
import play.Play;

import javax.imageio.*;
import static org.imgscalr.Scalr.*;

public class ServeThumbnail extends Controller {
    public static Result at(String filename) {
        response().setContentType("image");
        ByteArrayOutputStream img_stream = null;
        try {
            File file = new File(Play.application().configuration().getString("home_dir") + "/pictures/"+filename);
            BufferedImage thumbnail = createThumbnail(ImageIO.read(file));
            img_stream = new ByteArrayOutputStream();
            ImageIO.write(thumbnail, "jpg", img_stream);
        } catch (FileNotFoundException e) {
            return badRequest("image not found");
        } catch (IOException e) {
            return badRequest("image not found");
        }
        return ok(img_stream.toByteArray());
    }

    public static BufferedImage createThumbnail(BufferedImage img) {
        img = resize(img, Method.ULTRA_QUALITY, 125, OP_ANTIALIAS, OP_BRIGHTER);
        return pad(img, 4);
    }
}
于 2014-05-23T08:39:10.093 に答える
0

Google スレッドで情報を見つけました - https://groups.google.com/forum/?fromgroups=#!topic/play-framework/3_H_YmxzQUo

Apprantly Play は、私が説明したことを行うように設計されていませんが、独自のコントローラーを作成して動作させることができます。/conf/router

GET     /assets/images/upload/:file_name        controllers.ServeImage.at(file_name)

そして作成した/controllers/ServeImage.java

package controllers;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.apache.commons.io.IOUtils;
import play.mvc.Controller;
import play.mvc.Result;

public class ServeImage extends Controller
{
    public static Result at(String filename)
    {
        response().setContentType("image");     
        byte[] i_file = null;

        try
        {
            i_file = IOUtils.toByteArray(new FileInputStream(new File("public/images/upload/"+filename)));
        } catch (FileNotFoundException e)
        {
            // return 404
        } catch (IOException e)
        {
            // return 404           
        }

        return ok(i_file);
    }   
}
于 2013-02-21T16:40:12.487 に答える