我最近有一个issue to resolve并找到了解决方案,但如果我能以某种方式使用RequestDispatcher.forward
将请求转发到媒体网址,那么该解决方案可能会大大简化。
从文档中可以看出它只支持servlet, JSP file, or HTML file。无论如何我尝试使用媒体网址并且它没有抱怨,但它没有返回正确的标题(例如mime类型),也许还有其他或其他错误的东西,但无论如何它没有按预期工作。
我是否可以将RequestDispatcher.forward
与媒体网址一起使用,以便提供响应,就像直接向网络服务器请求媒体网址一样?
修改
我可以证明至少Content-Type
是正确的,因为它为任何媒体文件返回Content-Type text/html; charset=iso-8859-1
。此外,我已经尝试直接在Window Media Player中打开网址,它似乎是在开始播放之前下载整个视频,这是不可接受的。因此,我可以放心地假设forward
不仅将控件交还给IIS,或者至少对于媒体文件不正确。
答案 0 :(得分:2)
您找到的解决方案指向正确的方向,但我不了解coldfusion
,但使用servlet可以非常轻松地完成同样的事情。
如果要使用RequestDispatcher.forward
方法,则可以在forward方法中指定servlet url。
在该servlet中,您需要做的就是阅读媒体并使用OutputStream
作为响应发送它。
例如:
在您的servlet doGet
或doPost
方法中
您只需根据媒体设置内容类型,阅读并发送即可。
下面是一个简单的示例,可用于将媒体作为来自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();
}