我们用过的embed标签 src路径
解释: 只需理解src为一个url 或 uri, 如果在项目中用到了相对路径,即:在项目根路径开始写路径,而不是全路径,则,网页就可以解析到我们的项目路径下, 如果我们写的是全路径,即格式为: "C:/sldfk/sldkj", 这样,网页访客浏览器中看到的就是这个原始路径,但实际上会定位到访客个人电脑的这个路径,即,如果访客个人电脑中没有这个路径问题就产生了,因为,如果写的是项目的相对路径,解析出来的是服务器的物理IP.即可访问到服务器上的路径,也就是说上面的绝对路径写法实际上是走了file文件uri协议,故直接定位本地文件系统了,而没有走http协议.
其实完美的解决方案是用流读取写出,这样就避免了src后面的路径问题.即,在src中写一个servlet路径,传入相应的文件名等参数,在后台该servlet中用流把请求的文件协会(inputStream). 当然,如果用的是struts2,就写struts2的action函数url, 在struts.xml文件中配置返回页面为当前页面,例:
页面:
<embed src="Controller_voice.action?currentFileFullName=<s:property value="fileFullName"/>" autostart=false height=45/>
action中:
public InputStream getVoiceFile() throws FileNotFoundException {
return new FileInputStream(this.getCurrentFileFullName());
//return ServletActionContext.getServletContext().getResourceAsStream(this.getCurrentName());
}
public String voice(){
return "voice";
}
Struts.xml中:
<result name="voice" type="stream">
<!-- 下载文件类型 -->
<param name="contentType">audio/wav</param>
<param name="inputName">inputStream</param>
<!-- 下载的InputStream流,Struts2自己动对应Action中的getVoiceFile方法,该方法必须返回InputStream 类型 -->
<param name="inputName">voiceFile</param>
<param name="bufferSize">2048</param>
</result>