繁体   English   中英

RequestDispatcher.forward到媒体文件?

[英]RequestDispatcher.forward to a media file?

我最近有一个问题要解决并找到了解决方案,但如果我能以某种方式使用RequestDispatcher.forward将请求转发到媒体URL,那么该解决方案可能会大大简化。

从文档中可以看出它只支持servlet,JSP文件或HTML文件 无论如何我尝试使用媒体网址并且没有抱怨,但它没有返回正确的标题(例如mime类型),也许还有其他或其他错误的东西,但无论如何它没有按预期工作。

有没有办法可以将RequestDispatcher.forward与媒体URL一起使用,以便提供响应,就像直接向Web服务器请求媒体URL一样?

编辑:

我可以证明至少Content-Type是正确的,因为它返回Content-Type text/html; charset=iso-8859-1 Content-Type text/html; charset=iso-8859-1适用于任何媒体文件。 此外,我已经尝试直接在Window Media Player中打开网址,它似乎是在开始播放之前下载整个视频,这是不可接受的。 因此,我可以放心地假设forward不只是将控件交还给IIS,或者至少对于媒体文件不正确。

您找到的解决方案指向正确的方向,但我不了解coldfusion ,但使用servlet可以很容易地完成同样的事情。

如果要使用RequestDispatcher.forward方法,则可以在forward方法中指定servlet url。 在该servlet中,您需要做的就是读取媒体并使用OutputStream作为响应发送它。

例如:

在servlet的doGetdoPost方法中,您只需根据媒体设置内容类型,阅读并发送。

下面是一个简单的示例,您可以使用该示例将介质作为来自servlet的响应发送:

public void doGet(HttpServletRequest request, HttpServletResponse response)  {
    response.setContentType("video/x-ms-wmx");
    ServletContext ctx = getServletContext();

    InputStream is = ctx.getResourceAsStream("/path/to/media/file");

    int read = 0;
    byte bytes[] = new byte[1024];

    OutputStream os = response.getOutputStream();
    while((read = is.read(bytes)) != -1) {
        os.write(bytes, 0, read);
    }
    os.flush();
    os.close();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM