我一直在努力寻找在Undertow中传递.jpeg,.png或其他内容的方法。发送byte []将不起作用,因为Undertow是非阻塞的,我不想通过常规方法在输出上写入文件:
exchange.getOutputStream().write(myFileByteArray);
还有其他方法可以实现吗?我还使用Undertow的默认Base64库在Base64中对图像进行了编码,但也没有用。
编辑:提供一些代码: 这是我编码文件的方法。它适用于.js,.html和其他文本文件,但不适用于图像。但编码工作正常,所以我的问题是,如果我把它发回给请求的人时做错了。
这是我如何响应:(用于堆栈溢出的硬编码)
exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "image/jpeg");
exchange.getResponseSender().send(getResource(resource, true));
我没有在下方得到任何例外。图像只是不会出现在浏览器上。浏览器说它无法解码图像..
感谢。
答案 0 :(得分:3)
好的,所以经过大量的工作,想知道我的MIME配置是否正确,我实际上发现你只需要将文件写入交换对象的OutputStream。
这就是我的所作所为:
if(!needsBuffering){
exchange.getResponseSender().send(getResource(resource));
}else{
exchange.startBlocking();
writeToOutputStream(resource, exchange.getOutputStream());
}
...
private void writeToOutputStream(String resource, OutputStream oos) throws Exception {
File f = new File(this.definePathToPublicResources() + resource);
byte[] buf = new byte[8192];
InputStream is = new FileInputStream(f);
int c = 0;
while ((c = is.read(buf, 0, buf.length)) > 0) {
oos.write(buf, 0, c);
oos.flush();
}
oos.close();
is.close();
}