项目中遇到直接读取声音文件时,对于绝对地址(如D:\文件),w无法获取,而在浏览器直接输地址确可以。为了解决问题,下面采用流的方式返回前端。
Java代码
@ParentPackage(“tads-support”)
public class WavFileManage extends BaseAction {
private ByteArrayInputStream imageStream;
private static final long serialVersionUID = -4106065750866542811L;
public String image() throws IOException{
HttpServletRequest request = ServletActionContext.getRequest();
//获取webroot下的文件
String path = request.getParameter("filename");
//创建文件输入流
FileInputStream fis = new FileInputStream(path);
//放入bufferedInputStream
BufferedInputStream bis=new BufferedInputStream(fis);
//定义ByteArrayOutStream
ByteArrayOutputStream output = new ByteArrayOutputStream();
int c=bis.read();//读取bis流中的下一个字节
while(c!=-1){
output.write(c);
c=bis.read();
}
bis.close();
imageStream = new ByteArrayInputStream(output.toByteArray());
return SUCCESS;
}
public ByteArrayInputStream getImageStream() {
return imageStream;
}
public void setImageStream(ByteArrayInputStream imageStream) {
this.imageStream = imageStream;
}
}
struts.xml配置
<struts>
<package name=“tads-support” namespace="/" extends=“tads-default”>
<!-- 返回声音流 -->
<action name=“image” class=“com.kthw.tads.action.WavFileManage” method=“image”>
<result name=“success” type=“stream”>
<param name=“contentType”>audio/wav 《param>
<param name=“inputName”>imageStream 《param>
< param name=“bufferSize”>2048 《param>
</result>
</action>
</package>
</struts>
前端
<a href="image.do?filename=D:**** " target="_blank" >