Playframework 游戏2.1,可以';在服务器重新启动之前,无法访问上载的映像
我制作了一个上传图像的表单,将文件保存到播放子目录Playframework 游戏2.1,可以';在服务器重新启动之前,无法访问上载的映像,playframework,playframework-2.1,Playframework,Playframework 2.1,我制作了一个上传图像的表单,将文件保存到播放子目录/public/images/ 保存在此处的图像,例如/public/images/test.jpg,可以像http://example.com/assets/images/test.jpg 浏览器指示此链接已断开,直到我重置播放服务器,它才允许我访问最近上载的图像 当我使用“run”命令在Dev模式下运行play服务器时,可以上传和访问图像,而无需进行重置 在/conf/routes中,我有 GET /assets/*file
/public/images/
保存在此处的图像,例如/public/images/test.jpg
,可以像http://example.com/assets/images/test.jpg
浏览器指示此链接已断开,直到我重置播放服务器,它才允许我访问最近上载的图像
当我使用“run”命令在Dev模式下运行play服务器时,可以上传和访问图像,而无需进行重置
在/conf/routes
中,我有
GET /assets/*file controllers.Assets.at(path="/public", file)
我在谷歌的一个帖子上找到了一些信息- 很明显,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);
}
}
我遇到了同样的问题。令人惊讶的是,这部戏并没有让这件事变得容易。下面是一个相关的控制器,它在ImageScar库的帮助下从外部路径提供缩略图
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);
}
}