Undertow 中的图像/媒体 MIME 类型响应

Posted

技术标签:

【中文标题】Undertow 中的图像/媒体 MIME 类型响应【英文标题】:Image/Media MIME type responses in Undertow 【发布时间】:2015-05-15 09:34:02 【问题描述】:

我一直在努力寻找在 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));

我没有得到任何例外。图片只是不会显示在浏览器上。浏览器说它无法解码图像..

谢谢。

【问题讨论】:

有什么问题?那是您遇到的错误,您的代码是什么? 好的,我会提供一些。坚持 您能分享您为此图像请求获得的响应标头吗? 这行得通吗? imgur.com/3uUsttM 是的,基本上我想看看您的响应标头显示了 base64 信息。它没有显示在您的共享网址中。 【参考方案1】:

好的,经过大量的工作想知道我的 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();


【讨论】:

needsBuffering 来自哪里?

以上是关于Undertow 中的图像/媒体 MIME 类型响应的主要内容,如果未能解决你的问题,请参考以下文章

在 drupal 7 中更改 CDN 中的视频内容类型(mime 类型)

PDF 文件的正确 MIME 媒体类型

PDF 文件的正确 MIME 媒体类型

引用的 MIME 媒体类型参数是不是允许转义引号?

Media Type 媒体类型(MIME Type、Content Type)

下载流媒体不返回真实文件。错误的内容类型或 mime?