Image/Media Undertow 中的 MIME 类型响应
Image/Media MIME type responses in Undertow
我一直在努力寻找一种在 Undertow 中传送 .jpeg、.png 或其他内容的方法。发送 byte[] 是行不通的,因为 Undertow 是非阻塞的,我不想像往常一样在输出上写入文件:
exchange.getOutputStream().write(myFileByteArray);
有什么其他方法可以实现吗?我还使用 Undertow 的默认 Base64 库对图像进行了 Base64 编码,但也没有用。
编辑:提供一些代码:
这是我对文件进行编码的方法。它适用于 .js、.html 和其他文本文件,但不适用于图像。不过,编码是有效的,所以我的问题是我在将它发回给请求者时是否做错了什么。
我是这样回应的:(为了 Whosebug 目的而硬编码)
exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "image/jpeg");
exchange.getResponseSender().send(getResource(resource, true));
我在逆流方面没有遇到任何异常。图片只是不会显示在浏览器上。浏览器说无法解码图片..
谢谢。
好的,经过大量的工作,想知道我的 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();
}
我一直在努力寻找一种在 Undertow 中传送 .jpeg、.png 或其他内容的方法。发送 byte[] 是行不通的,因为 Undertow 是非阻塞的,我不想像往常一样在输出上写入文件:
exchange.getOutputStream().write(myFileByteArray);
有什么其他方法可以实现吗?我还使用 Undertow 的默认 Base64 库对图像进行了 Base64 编码,但也没有用。
编辑:提供一些代码: 这是我对文件进行编码的方法。它适用于 .js、.html 和其他文本文件,但不适用于图像。不过,编码是有效的,所以我的问题是我在将它发回给请求者时是否做错了什么。
我是这样回应的:(为了 Whosebug 目的而硬编码)
exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "image/jpeg");
exchange.getResponseSender().send(getResource(resource, true));
我在逆流方面没有遇到任何异常。图片只是不会显示在浏览器上。浏览器说无法解码图片..
谢谢。
好的,经过大量的工作,想知道我的 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();
}