StreamingResolution Stripes

isp*_*pan 5 java stripes

任何人都可以帮助我使用Java Framework - 条带?我尝试上传图像stripes:file,在服务器上调整大小并返回新的StreamingResolution返回("image/jpeg"...我现在不知道如何发送StreamingResolution以及如何stripes:file在jsp上的元素之后加载图像?

非常感谢

Poi*_*nty 5

好吧,如果你想在上传后在页面上显示图像,有几件事需要处理.首先,"POST"必须有某种结果,结果可能不是图像数据.也就是说,让你的动作(你的"事件处理程序",如Stripes人们称之为)返回StreamingResolution并不是真的有意义,除非你只是希望用户能够像下载的文件一样保存图像.

因此,您的图像上传"POST"可能只涉及转发到结果页面的简单分辨率.在该页面内,您可以将<img>具有"src"设置的HTML 标记放到另一个Stripes操作中.现在该操作将返回图像数据的StreamingResolution.

要解决的一个问题是在两个HTML事务中保留图像数据的位置.为此,我使用了Stripes"flash scope",因为它非常简单.如果您的服务器代码无论如何都要将图像存储在数据库中,当然,您的图像操作URL只包含某种识别信息.

假设你能找到的图像数据,所有的服务器端处理程序所要做的就是创建一个具有为实现一个StreamingResolution实例stream()方法.这需要一个参数(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) { }
            }
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

setAttachment(false);在开始写出图像数据之前,您还需要调用.这个例子用于文件下载,所以在我的情况下我希望它是一个附件(这是默认的).但是,如果您正在响应从<img>标记生成的"GET" ,则不希望它看起来像附件.