任何人都可以帮我解决java Framework - 条纹问题吗?
我尝试使用stripes:file
上传图片,在服务器上调整大小并返回新的StreamingResolution
返回(“image / jpeg”...
我现在不知道如何使用StreamingResolution
发送,如何在jsp上的stripes:file
元素之后加载图像?
非常感谢
答案 0 :(得分:5)
如果你想在上传后在页面上显示图像,那么有几件事需要处理。首先,“POST”必须有某种结果,结果可能不会成为图像数据。也就是说,让你的动作(你的“事件处理程序”,如Stripes人们称之为)返回StreamingResolution并不是真的有意义,除非你只是希望用户能够像下载的文件一样保存图像。
因此,您的图片上传“POST”可能只涉及转发到结果页面的简单分辨率。在该页面内,您可以将具有“src”设置的HTML <img>
标记放到另一个Stripes操作中。现在该操作将返回图像数据的StreamingResolution。
要解决的一个问题是在两个HTML事务中保留图像数据的位置。为此,我使用了Stripes“flash scope”,因为它非常简单。如果您的服务器代码无论如何都要将图像存储在数据库中,当然,您的图像操作URL只会包含某种识别信息。
假设您可以找到图像数据,那么您的服务器端处理程序所要做的就是创建一个具有stream()
方法实现的StreamingResolution实例。这需要一个参数(HttpServletResponse)。从那里,您将打开一个带有response.getOutputStream()
的输出流,将图像数据复制到该输出流,然后关闭该流。这真的不多。这是一个发送简单文件的示例,但对您而言,主要区别在于跟踪图像数据,当然还有不同的MIME类型:
public Resolution image() {
return new StreamingResolution("text/plain") {
public void stream(final HttpServletResponse response) {
InputStream sample = null;
try {
sample = getResourceAsStream(SAMPLE + getContext().getLocale().toString());
if (sample == null) sample = getResourceAsStream(SAMPLE + "en_US");
final OutputStream out = response.getOutputStream();
final byte buffer[] = new byte[8192];
out.write((HEADER + "\n").getBytes());
for (int rc = sample.read(buffer); rc > 0; rc = sample.read(buffer))
out.write(buffer, 0, rc);
}
finally {
if (sample != null) try { sample.close(); } catch (IOException ioe) { }
}
}
};
}
在开始写出图像数据之前,您还想调用setAttachment(false);
。这个例子是用于文件下载的,所以在我的情况下,我希望它是一个附件(这是默认的)。但是,如果您要回复从<img>
标记生成的“GET”,则不希望它看起来像附件。